Django框架——可视化界面之数据增删改查、Django请求生命周期、Django路由层、反向解析
可视化界面之数据增删改查
针对数据对象主键字段的获取可以使用更加方便的 obj.pk获取
在模型类中定义双下str方法可以在数据对象被执行打印操作的时候方便的查看
'''
form表单中能够触发调剂动作的按钮只有两个
<input type='submit'/>
<button></button>
'''
1.数据展示功能
开设接口、获取数据、传递页面、展示数据
2.数据添加功能
开设接口、获取数据、发送数据、校验数据、录入数据、重定向
3.数据编辑功能
开设接口、后端如何区分所要编辑的数据(问号携带参数)、后端获取用户数据、前端展示默认数据、获取用户并完成更新
4.数据删除功能
开设接口、问号携带参数、删除二次确认
Django请求生命周期
WSGI,uWSGI,uwsgi区别
WSGI是一个协议WSGI是一个协议,wsgi server (比如uWSGI) 要和 wsgi application(比如django )交互,uWSGI需要将过来的请求转给django 处理,那么uWSGI 和 django的交互和调用就需要一个统一的规范,这个规范就是WSGI WSGI(Web Server Gateway Interface)
WSGI ---> 协议
uwsgi---> 协议
uWSGI---> 相当于服务器
#流程
user --> HTTP协议 --> NGINX --> uwsgi协议 --> uWSGI服务器 ---> WSGI --> Django
Django路由层
1.路由匹配
Django2.x及以上 path第一个参数写什么就匹配什么
Django1.x第一个参数就是正则表达式
无论什么版本Django都自带加斜杠后缀的功能 也可以取消
配置文件中 APPEND_SLASH = False # 默认是True 路由匹配的时候自动添加斜杠后缀
2.转换器
正常情况下很多网站都会有很多相似的网址 如果我们每个都单独开设路由不合理
Django2.x及以上版本路由动态匹配有转换器(五种)
str:匹配除路径分隔符外的任何非空字符串。
int:匹配0或者任意正整数。
slug:匹配任意一个由字母或数字组成的字符串。
uuid:匹配格式化后的UUID。
path:能够匹配完整的URL路径
ps:还支持自定义转换器(自己写正则表达式匹配更加细化的内容)
# 转换器:将对应位置匹配到的数据转换成固定的数据模型
path('index/<str:info>/', views.index_func) # index_func(实参request对象,info='转换器匹配到的类型转换之后的内容')
path('index/<str:info>/<int:id>/', views.index_func) # index_func(试产request对象,info='转换器匹配到的类型转换之后的内容',id='转换器撇陪到的类型转换之后的内容')
3.正则匹配
Django2.x及以上版本有re_path 第一个参数是正则
匹配的本质是只要第一个正则表达式能够从用户输入的路由中匹配到数据就算匹配成功会立刻停止路由层其他的匹配直接执行对应的视图函数
re_path('^test/$', views.test)
django1.X路由匹配使用的是url() 功能与django2.X及以上的re_path()一致
4.正则匹配的无名有名分组
无名分组
django2.x ---> re_path('^test/(\d{4})/', views.test)
django1.x ---> url('^test/(\d{4})/', views.test)
会将括号内正则匹配到的内容当做位置参数传递给视图函数
有名分组
re_path('^test/(?P<year>\d{4})/',views.test)
会将括号内正则匹配到的内容当做关键字参数传递给试图函数
注意上述的分组不能混合使用!!!
反向解析
通过一个名字可以反向解析出一个结果 该结果可以访问到某个对应的路由
基本使用
1.路由匹配关系起别名
url(r'^login001/',views.login,name='login_view')
2.反向解析语法
html页面上模版语法 {% url 'login_view' %} # 起别名之后无论路由匹配中怎么改 在html页面中不需要修改 都固定是这个路由
后端语法 reverse('login_view') # 可以反向解析出一个地址 redirect可以直接重定向这个地址
动态路由的反向解析
path('func1/<str:others>/', views.func1_func, name='func1_view')
url(r'^func1/(?P<others>.*?)/',views.func1_func,name='func1_view')
html页面上模板语法 {% url 'func1_view' 'jason' %}
html页面上模板语法 {% url 'func1_view' ID %}
# 模版语法中的'jason'是上面你想要把路由后面匹配的字符串解析成什么 之后一般都是写数据的主键值 可以传多个 空格隔开即可
后端语法 reverse('func1_view', args=('嘿嘿嘿',))
# 在后端语法中 传参数的话需要用一个args接收一下就可以反向解析 args中放的是额外的动态部分 可以传多个 在args中逗号隔开即可