本文主要是介绍2021/6/15 django基础 路由曾 视图层,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
'''
创建项目
django-admin startproject 项目名
python manage.py startapp app01
installed_apps=[
'app01',
'app01.apps.App01Config'
]
手动创建templates
templates = [{
'DIRS': os.path.join(BASE_DIR, 'templates')
}]
手动创建静态文件
staticfiles_dirs = [
os.path.join(BASE_DIR, 'static')
]
目录结构
xxx
app01
migrations
__init__.py
__init__.py
models.py
tests.py
apps.py
views.py
admin.py
xxx
__init__.py
urls.py
wsgi.py
settings.py
manage.py
static
templates
db.sqlite3
开启django服务
python manage.py runserver
静态文件
{% load static %} 引入配置文件中 static 变量的值
{% static 'zzw/1' %} 此刻static代表 /static/,即合并后/static/zzw/1
request 背过了
django三板斧
HttpResponse 返回字符串给前端,字符串中可以存在html语言,一样生效
redirect 重定向
render 返回完整html模板文件给前端,内部源码还是使用 HttpResponse
django 请求声明周期图
路由匹配
from django.conf.urls import url
url('re', view.xxx, name=None, kwargs=None)
from django.urls import path, re_path
path('绝对匹配', view.xxx, name=None)
re_path('re', view.xxx, name=None, kwargs=None) --> url
转换器
<str/int/slug/uuid/path:xx> --> **kwargs
str: 匹配非/以外的所有非空白字符
path:匹配所有非空白字符
int: 正整数,包括0
slug:数字、字母、下划线、中横线
uuid:uuid的标准格式
自定义转换器(可以自定义转换器,在内部书写正则,然后在url中引用、注册、调用)
URL末尾反斜杠
由 append_slash=Ture 控制,默认由django加上/再匹配一次
分组命名匹配
无名有名不能混合使用
无名分组
(re) --> *args
有名分组
(?P<xxx>re) --> **kwargs
反向解析
from django.shortcuts import reverse
reverse('name') --> ip后面的路径
无名反向解析
url(r'(re)')
from django.shortcuts import reverse
reverse('name', args=(x,))
{% url name x %}
有名分组反向解析
url(r'(?P<xxx>re)')
from django.shortcuts import reverse
reverse('name', args=(x,))
{% url name x %}
reverse('name', kwargs={'xxx':xx})
{% url name xxx=x %}
路由分发
每一个应用下,都可以拥有自己的templates、static、urls.py,需要自己手动创建
from django.conf.urls import url, include
url(r'', include('app01.urls'))
from app01 import urls as xxx
url(r'', include(xxx))
名称空间
防止多个应用下的url name名称冲突(PS:name命名使用 应用名_名称,即可避免)
from django.conf.urls import include, url
url(r'', include('app01.urls', namespace='app01'))
这样,app01的url就存放在他自己的名称空间内,不会出现名称冲突了
伪静态
url后面都有.html结尾,即是静态网页,会增加搜索机器人的搜索频率
url(r'xxx.html') 即可
简单的视图函数
url(r'', views.zzw, name="zzw")
def zzw(xxx):
return HttpResponse('zzw')
FBV与CBV
FBV:函数方式的视图函数
CBV:基于类的视图
CBV源码
url(r'', views.xxx.as_view())
关键在as_view(),其内部存在一个嵌套函数为view
as_view()的返回值就是view
view函数内部,将参数进行赋值,并返回了dispatch函数的调用
该函数内部进行了反射操作,然后返回对应的函数调用,从而实现
get请求来,就是调用get方法
CBV添加装饰器
method_decorator(login_auth, name="")
如果放在类上面,同时指定name属性,那么就是装饰指定的方法
如果放在类内的第一个方法上,那就是装饰所有方法
如果放在类内的非第一个方法上面,那就是单独装饰该方法
request
属性
.method 返回请求方式,大写
.POST 返回字典,POST请求中的数据,如 application/x-www-form-urlencoded,ajax
.GET 返回字典,GET请求中的数据
.get(k)
.getlist(k)
.FILES 返回字典,文件数据,如 multipart/form-data,ajax中 FormData()
.body 返回bytes,如ajax json
.META 返回HTTP协议头部
.scheme 返回当前Http协议 http/https
.path 返回当前路径,出去ip和路径参数
.path_info 与path一致
.encoding 返回编码方式,none代表使用浏览器的默认编码方式
.session 返回session
.COOKIES 返回cookies
.user 返回当前登录的用户对象
方法
is_secure() 如果时https协议,返回True
is_ajax() 如果是ajax请求,返沪True
get_full_path() 返回ip后面的完整路径,包括路径参数
get_host() 返回ip:port
用户对象方法
is_authenticated() 判断当前用户是否登录,返回bool
set_password('xxx')
save()
check_password('xxx') 校验密码,返回bool
HttpResponse
a = HttpResponse('xxx')
a.content
a.charset
a.status_code
a['Content-Type'] = 'text/html'
del a['Charset']
from django.http import JsonResponse
JsonResponse(
data,
json_dumps_params={'ensure_ascii':False}
safe=True,
)
render
(
request,
'html',
{'前端名': '后端数据'}, 简单点直接写入 locals() 将函数内的局部变量全部传递过去
content-type
status=200,
using,
)
redirect
(
url
permanent=True
)
'''
这篇关于2021/6/15 django基础 路由曾 视图层的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!