首页 > 其他 > 详细

Django中的路由层

时间:2019-11-20 16:09:14      阅读:120      评论:0      收藏:0      [点我收藏+]

无名分组、有名分组、反向解析、路由分发、FBV与CBV

 

    无名分组(将加括号的正则表达式匹配到的内容当做位置参数自动传递给对应的视图函数)

url(r^test/(\d+)/,views.test),  # 匹配一个或多个数字

def test(request,xxx):
    print(xxx)
    return HttpResponse(test)
   


    有名分组(将加括号的正则表达式匹配到的内容当做关键字参数自动传递给对应的视图函数)

url(r^test/(?P<year>\d+)/,views.test),  # 匹配一个或多个数字
        
def test(request,year):
    print(year)
    return HttpResponse(test)

    
 注意:无名分组和有名分组不能混着用!!!
        url(r‘^test/(\d+)/(?P<year>\d+)/‘,views.test)
    
    
但是支持用一类型多个形式匹配

无名分组多个
    url(r^test/(\d+)/(\d+)/,views.test),
有名分组多个
    url(r^test/(?P<year>\d+)/(?P<xxx>\d+)/,views.test),

 

 

反向解析:(根据名字动态获取到对应路径)

from django.shortcuts import reverse

       url(r^index6668888/$,views.index,name=index)

# 可以给每一个路由与视图函数对应关系起一个名字
# 这个名字能够唯一标识出对应的路径
# 注意这个名字不能重复是唯一的
        
    前端使用
        {% url index %}
        {% url 你给路由与视图函数对应关系起的别名 %}
    
    后端使用
        reverse(index)
        reverse(你给路由与视图函数对应关系起的别名)

 

无名分组反向解析

url(r^test/(\d+)/,views.test,name=list)
后端使用
print(reverse(list,args=(10,)))
前端使用 {
% url list 10 %} user_list = models.User.objects.all()


url(r
^edit/(\d+)/,views.edit,name=edit)
前端模板语法 {
%for user_obj in user_list%} <a href=edit/{{ user_obj.pk }}/></a> {% endfor %} 视图函数 from django.shortcuts import reverse def edit(request,edit_id): url = reverse(edit,args=(edit_id,)) 模板 {% url edit edit_id %}

 


有名分组反向解析

后端使用
      # 后端有名分组和无名分组都可以用这种形式
      print(reverse(list,args=(10,)))
# 下面这个了解即可 print(reverse(list,kwargs={year:10}))
前端使用
# 前端有名分组和无名分组都可以用这种形式 {% url list 10 %} # 下面这个了解即可 {% url list year=10 %}

 


总结:针对有名分组与无名分组的反向解析统一采用一种格式即可

 

后端
     reverse(list,args=(10,))  # 这里的数字通常都是数据的主键值
前端
     {% url list 10 %}
# 反向解析的本质:就是获取到一个能够访问名字所对应的视图函数

 

 

 

路由分发

django每一个app下面都可以有自己的urls.py路由层,templates文件夹,static文件夹
项目名下urls.py(总路由)不再做路由与视图函数的匹配关系而是做路由的分发
from django.conf.urls import include # 路由分发 注意路由分发总路由千万不要$结尾 url(r^app01/,include(app01_urls)), url(r^app02/,include(app02_urls)) # 在应用下新建urls.py文件,在该文件内写路由与视图函数的对应关系即可 from django.conf.urls import url from app01 import views urlpatterns = [ url(r^index/,views.index) ]

 

FBV与CBV

 

FBV(function base views) 就是在视图里使用函数处理请求。

urls.py

from django.conf.urls import url, include
# from django.contrib import admin
from mytest import views
 
urlpatterns = [
    # url(r‘^admin/‘, admin.site.urls),
    url(r‘^index/‘, views.index),
]

views.py

from django.shortcuts import render
 
 
def index(req):
    if req.method == ‘POST‘:
        print(‘method is :‘ + req.method)
    elif req.method == ‘GET‘:
        print(‘method is :‘ + req.method)
    return render(req, ‘index.html‘)

 

CBV(class base views) 就是在视图里使用类处理请求。

urls.py

from mytest import views
 
urlpatterns = [
    # url(r‘^index/‘, views.index),
    url(r‘^index/‘, views.Index.as_view()),
]

注:url(r‘^index/‘, views.Index.as_view()),  是固定用法。

views.py

from django.views import View
 
 
class Index(View):
    def get(self, req):
        print(‘method is :‘ + req.method)
        return render(req, ‘index.html‘)
 
    def post(self, req):
        print(‘method is :‘ + req.method)
        return render(req, ‘index.html‘)

注:类要继承 View ,类中函数名必须小写。

 

 

Django中的路由层

原文:https://www.cnblogs.com/python-Arvin/p/11898364.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!