2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > python django 安装虚拟环境创建工程项目

python django 安装虚拟环境创建工程项目

时间:2022-07-01 04:13:23

相关推荐

python django 安装虚拟环境创建工程项目

django 中的三层架构:视图(控制层),数据模型,模板(视图层)

客户端浏览器发送请求 ——> 视图(接收请求,业务处理) ——> 数据模型 ——> 数据库 ——> 数据模型 ——> 视图 ——> 模板 ——> 视图 ——> 客户端

已经安装好了 python ,检查方法:输入 python 显示版本信息。

1、在桌面新建一个文件夹例如:dj_base.

2、进去该文件夹输入命令安装虚拟环境:C:\Users\Administrator\Desktop>python -m venv dj_base 成功以后文件夹里面便会有一下文件。

3、激活 输入命令cd dj_base/Scripts/activate 激活之后便会看见,前面多了 (dj_base)

4、安装 django 本次安装版本 2.2.5,选择国内的镜像

(dj_base) C:\Users\Administrator\Desktop>pip install django==2.2.5 -i /simple

5、检查安装结果,import django django.__version__ 可以查看到版本。

6、创建一个项目名称为:bookmanager

(dj_base) C:\Users\Administrator\Desktop>django-admin startproject bookmanager

在桌面出现项目文件夹

工程总目录与内部文件夹的名称是一样的,都是 bookmanager

manage.py python可执行文件:内置一些django的命令

关于项目内部bookmanager文件夹中的文件说明:

__init__.py 当前文件夹是一个模块

settings.pydjango中的配置文件 例如:数据库、缓存、中间件、语言等

urls.py路由文件:大家在访问网站时使用的网址

wsgi.py网关系统:在互联网中可以被其他计算机访问的文件

7、运行该项目,进入工程总目录下输入命令python manage.py runserver

打开网址:http://127.0.0.1:8000/

7-1 在pycharm 中运行项目

1、在 pycharm; 中打开项目,点击 Edit Configurations

2、设置地址和端口

3、点击运行即可

Django的基础命令

1.django-admin startproject 项目名:创建一个django项目

2.python manage.py startapp 应用名:项目中创建一个应用

3.python manage.py shell:进入调试代码的调试模式

4.python manage.py makemigrations:数据库创建更改文件

5.python manage.py migrate:同步到数据库进行更新

6.python manage.py flush:清空数据库

7.python manage.py runserver 0.0.0.0:8000:启动开发服务器(内置的单线程具有阻塞特性的服务器它不能支持高并发,只是用作测试,在实际工作中严令禁止通过开发服务器部署项目)

8.python manage.py 回车:可查看更多命令

二、创建项目子应用

1、创建子应用:python manage.py startapp + 应用名

例如:python manage.py startapp index

创建成功如图:

admin.py文件跟网站的后台管理站点配置相关。

apps.py文件用于配置当前子应用的相关信息。

migrations目录用于存放数据库迁移历史文件·

models.py文件用户保存数据库模型类。

tests.py文件用于开发测试用例,编写单元测试。

views.py文件用于编写Web应用视图。

2、用 pycharm 打开项目文件夹,setting 中配置环境,可点击 “ + ”号选择环境目录文件,我们这里的文件目录为:C:\Users\Administrator\Desktop\dj_base\Scripts\python.exe

3、注册子应用 index

settings.py 说明

# 返回一个项目的绝对路径BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# 数据加密 防止网站跨域攻击SECRET_KEY = 'd5tsvvss^(&_jgvdo3lf_2_&pvs=3j(55d3oug&#t5y*-i^+(%'# 让网站处于开发模式DEBUG = True# 允许访问网站的白名单,例如写上 ip 地址,或者允许所有的访问 写上通配符: ’*‘ALLOWED_HOSTS = []# 子应用注册(新创建的子应用要在这里注册)INSTALLED_APPS = []# 中间件MIDDLEWARE = []# 网站入口根路由配置ROOT_URLCONF = 'bookmanager.urls'# 配置 html 静态文件TEMPLATES = []# 配置开发服务器WSGI_APPLICATION = 'bookmanager.wsgi.application'# 配置数据库DATABASES = {}# 用户密码加密AUTH_PASSWORD_VALIDATORS = []# 网站默认语言LANGUAGE_CODE = 'zh-hans'# 网站的默认时间TIME_ZONE = 'Asia/Shanghai'

4、在子应用的 views.py 创建一个函数

from django.http import HttpResponsedef hello(request):return HttpResponse('hello django')

5、在子应用 index 文件夹下创建子路由文件 urls.py ,因为项目可能比较大,一般不去动根路由。

from django.urls import pathfrom .views import hello # 导入视图函数urlpatterns = [path('',hello),]

6、在根路由中导入子路由

from django.contrib import adminfrom django.urls import path,includeurlpatterns = [path('admin/', admin.site.urls),path('',include('index.urls')) # 导入子路由]

7、运行该项目,效果如下:

三、url 传参

第一种:

1、新建一个子应用 urlPassValue,创建子应用的方法同上。

2、编辑视图 views.py

from django.http import HttpResponse# Create your views here.def urlpassvalue(request):name = request.GET.get('name','')age = request.GET.get('age',10)return HttpResponse('路由传参的第一种')

3、创建子路由,新建 urls.py 文件

from django.urls import pathfrom .views import urlpassvalueurlpatterns = [path('upv',urlpassvalue),]

4、根路由中引入子路由

from django.contrib import adminfrom django.urls import path,includeurlpatterns = [path('admin/', admin.site.urls),path('',include('index.urls')),path('',include('urlPassValue.urls')), # 引入 url 传参示例的子应用]

5、运行项目,打开浏览器 在网址后面输入:upv?name=guan&age=10 运行效果:

第二种:与第一种不同的地方在

1、views.py

from django.http import HttpResponse# Create your views here.def urlpassvalue(request,name,age):return HttpResponse('路由传参的第二种')

2、urls.py

from django.urls import pathfrom .views import urlpassvalueurlpatterns = [path('upv/<str:name>/<int:age>',urlpassvalue),]

输入 upv/guan/10 效果:

三、views 详细介绍

1、创建一个应用python manage.py startapp firstview

2、 views.py

def message(request):print(dir(request))return HttpResponse('request是浏览器传过来的参数')

3、在应用中创建子路由,根路由中引入子路由,setting中注册子应用此处略过,最后运行如下图所示。

3.1request中的方法:

['COOKIES', 'FILES', 'GET', 'META', 'POST', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_current_scheme_host', '_encoding', '_get_full_path', '_get_post', '_get_raw_host', '_get_scheme', '_initialize_handlers', '_load_post_and_files', '_mark_post_parse_error', '_messages', '_read_started', '_set_post', '_stream', '_upload_handlers', 'body', 'build_absolute_uri', 'close', 'content_params', 'content_type', 'csrf_processing_done', 'encoding', 'environ', 'get_full_path', 'get_full_path_info', 'get_host', 'get_port', 'get_raw_uri', 'get_signed_cookie', 'headers', 'is_ajax', 'is_secure', 'method', 'parse_file_upload', 'path', 'path_info', 'read', 'readline', 'readlines', 'resolver_match', 'scheme', 'session', 'upload_handlers', 'user', 'xreadlines']

1.request.GET获取url上以?形式的参数

2.request.POST获取post提交的数据

3.request.path 请求的路径,比如:127.0.0.1/test/l,那这个值就是/test/1

4.request.method 请求的方法比如:get post

5.request.COOKIES 请求过来的cookies

6.request.user 请求的用户对象,可以通过它判断用户是否登录,并获取用户信息

7.request.session 一个既可读又可写的类似与字典的对象,表示当前会话

8.request.META一个标准的Python字典,包含所有的HTTP首部,具体的头部信息取决与客户端和服务器。

3.2常用的返回对象

from django.http import HttpResponse

HttpResponse 可以直接返回一些字符串内容

from django.shortcuts import render

render将数据在模板中渲染并显示

from django.http import JsonResponse

JsonResponse 返回一个json类型 通常用于与前端进行ajax交互

4、通过类创建视图对象

views.py

# 通用视图from django.views.generic import View# 通过类创建视图class Message(View):def get(self,request):return HttpResponse('通过类创建视图')

urls.py

from django.urls import pathfrom .views import Messageurlpatterns = [path('message/',Message.as_view())]

运行结果:

5、小案例,获取浏览器输入的值

5.1 views.py

from django.views.generic import View# 通过类创建视图class Message(View):def get(self,request):name = request.GET.get('name','默认值')age = request.GET.get('age',10)return HttpResponse('My name is {}, my age is {}'.format(name,age))

5.2 urls.py

from django.urls import pathfrom .views import Messageurlpatterns = [path('message',Message.as_view())]

运行结果:

四:模板 template 介绍

1、创建一个子应用 template

python manage.py startapp template

2、在根目录下新建 templates 文件夹

3、在 templates 文件夹新建一个 index.html 文件

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>template</title></head><body><p>这是{{name}}的第一个 template 文件</p></body></html>

4、编辑子视图views.py

# 返回一个HTML页面from django.shortcuts import render# 通用视图from django.views.generic import View# 通过类创建视图class Template(View):def get(self,request,name):return render(request,'index.html',{'name':name})

5、编辑子路由 urls.py

from django.urls import pathfrom .views import Templateurlpatterns = [path('template/<str:name>',Template.as_view())]

6、在根路由中引入子路由

7、在setting 中注册子路由和配置静态文件

8、运行项目输入网址 python manage.py runserver

template 内置标签

{% for %}{% endfor %} 遍历输出的内容{% if %}{% elif %}[% endif %}对变量进行条件判断{% url name args %} 引用路由配置名{% load %} 加载django的标签库{% load static %}{% static static_path %} 读取静态资源{% extends base_template %} 模板继承{% block data %}{% endblock %} 重写父模板的代码{% csrf_token %} 跨域密钥 一般在表单(form)中使用

for 标签模板

for标签模板forloop.counter从1开始计算获取当前索引 forloop.counter0从0开始计算获取当前索引forloop.revcounter索引从最大数递减到1forloop.revcounter0索引从最大数递减到0forloop.first当前元素是否是第一个forloop.last当前元素是否为最后一个empty 为空的情况

4.1 模板标签举例

views.py 传一个列表

# 通过类创建视图class Template(View):def get(self,request,name):list_data = range(10)return render(request,'index.html',{'name':name,'list_data':list_data})

index.html 用模板标签写循环和判断

<!--for 循环--><ul>{% for item in list_data %}<li>{{ item }}--{{forloop.counter}}--{{forloop.counter0}}--{{forloop.revcounter}}</li><!-- if 判断-->{% if forloop.first %}this is firsr number{% elif forloop.last %}this is last number{% endif %}{% endfor %}</ul>

结果如下:

图片的加载:根目录下新建 static 文件夹,再新建 image 文件夹,放入一张图片;

settings 新增配置:

# 配置静态文件STATICFILES_DIRS = [os.path.join(BASE_DIR,'statics')]

index.html 中加载这张图片

{% load staticfiles %}<img src="{% static 'images/测试下载1.jpg' %}" />

效果如下:

4.3模板过滤

内置过滤器与自定义过滤器过滤器的用处用于在htm模板中,对于渲染过来的数据进行二次操作使用,过滤器其实就是用来处理这些数据的模板引擎中使用的函数常用过滤器介绍内置过滤器使用方法说明add给value的值加10 {{value|add:10}}date把日期格式按照规定的格式化显示{{value|date:"Y-m-d H:i:s"}}cut将value中的xx删掉{{value|cut:'xx'}}capfirstvalue首字母大写{{value|capfirst}}default值为false时使用默认值{{value|default:'xx'}}default_if_none值为空时使用默认值{{value|default_if_none:'xx'}}dictsort值为字典的列表,按照key排序{{value|dictsort:'key'}}dictsortreversed按照key值反序 {{value|dictsortreversed:'key'}}first 返回列表中的第一个索引值{{value|first}}floatformat 保留小数点后两位 {{value|floatformat:2}}join类似python中的xx.join(value){{valueljoin:'xx'}}last 返回列表中的最后一个索引值 {{value|last}}length 返回值的长度 {{value|length}}divisbleby如果值可以被2整除即返回true{{value|divisibleby:2}}length_is如果值长度为2即返回true{{value|length_is:'2'}}safe将字符串中的html标签在前端安全展示{{value|safe}}random 随机返回列表中的一个值{{value|random}}slice 截取前两个字符{{value|silce:'2'}}slugify值小写,单词用-分隔{{value|slugify}}upper 字符串大写{{valuelupper}}urlize 字符串中的链接可点击 {{valuelurlize}}wordcount 字符串中的单词数 {{value|wordcount}}timeuntil 距离当前日期的天数和小时数(未来时间) {{value|timeunti1}}

模板使用方法例子:

创建一个子应用 templatefunc,

创建子应用的路由,在根路由中引用

views.py

from django.shortcuts import render# Create your views here.from django.shortcuts import renderfrom django.views.generic import Viewimport datetimeclass templatefunc(View):def get(self,request):dict_data = {}dict_data['count'] = 10dict_data['time'] = datetime.datetime.now()dict_data['cutt'] = '删除两个字'dict_data['Aa'] = 'apple'dict_data['result'] = Falsedict_data['res'] = Nonedict_data['dict_list'] = [{'name':'jack','age':25},{'name':'bob','age':21}]dict_data['floatnum'] = 3.141592654dict_data['html_str'] = '<span style="display:block;background-color:red;width:40px;height:14px;"></span>'dict_data['listnum'] = range(5)dict_data['words'] = "百度一下 你就知道。Baidu it and you will know."dict_data['fulture'] = dict_data['time'] + datetime.timedelta(days=5)return render(request,'templatefunc.html',dict_data)

templatefunc.html

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>templatefunc</title></head><body><h1>这是templatefunc</h1><p>初始的count:{{count}}</p><p>count + 10:<span>&nbsp;</span>{{count|add:10}} </p>时间:<span>&nbsp;</span>{{time}}--- {{time|date:'Y-m-d H-i-s'}}<br>cut: <span>&nbsp;</span>{{cutt}}--- {{cutt|cut:'两个'}}<br>capfirst首字母大写:<span>&nbsp;</span>{{Aa}}---{{Aa|capfirst}}<br>值为false 时使用默认值:<span>&nbsp;</span>{{result}}---{{result|default:'默认值'}}<br>值为空时使用默认值:<span>&nbsp;</span>{{res}}---{{res|default_if_none:'默认值'}}<br>值为字典时按照key排序:<span>&nbsp;</span> {{dict_list}}---{{dict_list|dictsort:'age'}}<br>按照 key 值反序:<span>&nbsp;</span> {{dict_list}}---{{dict_list|dictsortreversed:'age'}}<br>返回列表中的第一个索引值:<span>&nbsp;</span> {{dict_list}}---{{dict_list|first}}<br>保留小数点后两位:<span>&nbsp;</span>{{floatnum}}---{{floatnum|floatformat:2}}<br>类似python中的xx.join(value):<span>&nbsp;</span> {{Aa}}---{{Aa|join:'-'}}<br>返回列表中的最后一个索引值:<span>&nbsp;</span> {{dict_list}}---{{dict_list|last}}<br>返回值的长度:<span>&nbsp;</span>{{cutt}}---{{cutt|length}}<br>如果值可以被2整除返回 true:<span>&nbsp;</span> {{floatnum}}---{{floatnum|divisibleby:2}}<br>如果值长度为2返回 true :<span>&nbsp;</span>{{cutt}}---{{cutt|length_is:'2'}}<br>将字符串中的 html 标签在前端安全展示 :<span>&nbsp;</span>{{html_str}}---{{html_str|safe}}<br>随机返回列表中的一个值 :<span>&nbsp;</span>{{listnum}}---{{listnum|random}}<br>提取前两个字符串 :<span>&nbsp;</span>{{cutt}}---{{cutt|slice:'2'}}<br>值小写,单词用-分隔 :<span>&nbsp;</span>{{words}}---{{words|slugify}}<br>字符串大写 :<span>&nbsp;</span>{{words}}---{{words|upper}}<br>字符串中间的链接可点击:<span>&nbsp;</span> {{words}}---{{words|urlize}}<br>字符串中的单词数 :<span>&nbsp;</span>{{words}}---{{words|wordcount}}<br>距离当前日期的天数和小时数(未来时间):<span>&nbsp;</span> {{fulture}}---{{fulture|timeuntil}}<br>{% load myfilter %}自定义过滤器 {{count}}---{{count|test_filter:10}}</body></html>

效果:

4.4、创建自定义过滤器

在子应用下创建New Python package包, templatetag,再创建 myfilter.py文件

myfilter.py 编写自己的过滤器

from django import templateregister = template.Library()@register.filter # 加一个装饰器def test_filter(value,args):return value * args

在 html 中引用,(引用之后需要重启服务器,才能找到这个包)

<br>{% load myfilter %}自定义过滤器 {{count}}---{{count|test_filter:10}}</body>

显示效果

Jinja2模板

Jinja2的一些常用过滤器渲染时不转义 safe把值的首字母转换成大写,其他字母转换成小写 capitalize把值转换成小写形式 lower把值转换成大写形式upper把值中每个单词的首字母都转换成大写 title把值的首尾空格去掉 trim渲染前把值中所有的HTML标签都删掉 striptags

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。