Django(四)

django的请求生命周期流程图

image

路由层

1. 路由匹配, urls.py中

APPEND_SLASH = False 控制django是否自动加斜杠匹配

url(r'^testadd/$', views.testadd)

匹配规则:从上到下只要正则表达式匹配成功,就不会往下匹配了

'''
get请求的传参方式?
http://127.0.0.1:8000/test/?a=1
http://127.0.0.1:8000/test/1
'''

无名分组和有名分组

无名分组

url(r'^test/(\d+)', views.test),
# 会把括号中匹配的数字当成位置参数传给视图函数

有名分组

url(r'^test/(?P\d{2})$', views.test), # # 会把括号中匹配的数字当成关键字参数传给视图函数

反向解析

定义:通过一些方法得到一个结果,该结果可以直接访问对应的url触发视图函数

先给路由与视图函数起一个别名

url(r'^test/', views.test, name='aaa')
# 反向解析
# 前端反向解析
<a href="" {% url 'aaa' %}>臭傻逼
# 后端反向解析
from django.shortcuts import reverse
def home(request):
print(reverse('aaa'))
# 无名分组的反向解析
# 路由书写
url(r'^index/(\d+)/', views.index, name='aaa') # aaa为自起的别名
# 前端
臭傻逼
# 后端
def home(request):
print(reverse('aaa', args=(1, )))
# 有名分组的反向解析
# 后端
print(reverse('aaa', kwargs={'aaa': 1111}))
# 前端
臭傻逼
"""
这个数字写代码的时候应该放什么
数字一般情况下放的是数据的主键,利用该主键进行数据的更改和删除
url(r'^index/(\d+)/', views.index, name='aaa')

def index(request,args):
reverse('aaa', args=(index_id))

{%for user_obj in user_q%}
<a href"{% url 'aaa' user_obj_id%}">编辑

无名有名不能混合使用,可以单个多次使用!!!
"""

路由分发

重点

以后我们的django项目会越来越大,那么就会导致总路由文件会越来越大,就会非常难维护,我们会把总路由分开到不同的应用下面

'''
django的每一个应用都支持有自己的
urls.py
templates
static
'''

怎么样把这些应用串起来?就是使用路由分发。

使用路由分发一般都是多个应用

路由分发

'''第一种方式'''
from app01 import urls as app01_urls
from app02 import urls as app02_urls
url(r'^app01/', include(app01_urls)),
url(r'^app02/', include(app02_urls)),
'''
强调:路由分发时,总路由第一个参数一定不能加$
'''

第二种方式

url(r'^app01/', include('app01.urls')),
url(r'^app02/', include('app02.urls')),

名称空间(了解)

当多个应用出现相同的别名时,反向解析就没办法识别了

url(r'^app01/', include('app01.urls', namespace='app01')),
url(r'^app02/', include('app02.urls', namespace='app02')),

print(reverse('app01:index'))
print(reverse('app02:index'))

虚拟环境

针对不同的项目,创建出来一个新的python环境,类似于是一个新的python解释器

posted @ 2022-03-02 19:21  丶祈安  阅读(46)  评论(0)    收藏  举报