Django如何处理一个请求
当一个用户通过网页发送一个请求给Django网站,Django执行过程如下:
1. 首先访问项目下的settings.py文件中 ROOT_URLCONF = 'test1.urls'
2. 执行项目包下的urls.py文件中的urlpatterns列表
3. 执行应用包下的urls.py文件中的urlpatterns列表
4. 根据匹配的url正则调用相应的视图函数/通用视图
5. 如果没有匹配的正则,将会自动调用Django错误处理页面
正向解析
方式一:普通方式(一直在用)
所有映射都配到主路由中
在主路由中配置子路由
方式二:位置传参
方式三:关键字传参
方式四:关键字传参(参数名必须保持一致)
# http://127.0.0.1:8000/trans/query2/26
http://127.0.0.1:8000/trans/query2/2019/08
http://127.0.0.1:8000/trans/query3/2019/08/16/
http://127.0.0.1:8000/trans/query4/2019/08/16/
方式四的截图
逆向解析
方式一:防止硬编码
方式二:加上命名空间进行分包管理
http://127.0.0.1:8000/trans/query5_1/
http://127.0.0.1:8000/trans/query6_1/
相关代码
主路由
from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), # url(r'^trans/', include('trans.urls')), url(r'^trans/', include('trans.urls', namespace='transNamespace', app_name='transApp')), ]
子路由
urlpatterns = [ url(r'^$', views.query1_index), # url(r'^query2/(\d{2})$', views.query2_index), url(r'^query2/(\d{4})/(\d{2})$', views.query2_index), url(r'^query3/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.query3_index), url(r'^query4/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.query4_index, {'hello': '123'}), url(r'^query5_1/$', views.query5_1_index), url(r'^query5_2/([0-9]{4})/$', views.query5_2_index, name='hello'), url(r'^query6_1/$', views.query6_1_index), url(r'^query6_2/([0-9]{4})/$', views.query6_2_index, name='hello'), ]
views.py
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.http import HttpResponse from django.shortcuts import render # Create your views here. def query1_index(request): return HttpResponse('第一种正向方式:query1_index') # def query2_index(request,num): # return HttpResponse('第二种正向方式:query2_index_%s'%num) def query2_index(request, year, mon): return HttpResponse('第二种正向方式:query2_index_%s年%s月' % (year, mon)) def query3_index(request, month, day, year): return HttpResponse('第三种正向方式:query3_index_%s年%s月%s日' % (year, month, day)) def query4_index(request, month, day, year, hello): return HttpResponse('第四种正向方式:query4_index_%s年%s月%s日——%s' % (year, month, day, hello)) def query5_1_index(request): return render(request, 'reverse.html') def query5_2_index(request, year): return HttpResponse('第一种逆向解析:query5_index_%s年' % year) def query6_1_index(request): return render(request, 'reverse.html') def query6_2_index(request, year): return HttpResponse('第一种逆向解析:query6_index_%s年' % year)
over......
备案号:湘ICP备19000029号
Copyright © 2018-2019 javaxl晓码阁 版权所有