码迷,mamicode.com
首页 > 其他好文 > 详细

五十六、Django路由层与视图层

时间:2019-06-10 19:57:53      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:动态   for   cbv   个数   数据   lis   关键字   正则表达式   解析   

一、路由层

1、路由匹配规律

# 网站首页路由:url(r‘^$‘,views.home)
# 网站不存在页面:url(r‘‘,views.error)
urlpatterns = [
            url(r^admin/, admin.site.urls),
            url(r^$,views.home),
            url(r^test/$,views.test),
            url(r^testadd/$,views.testadd),
            url(r‘‘,views.error)
        ]
# 注意:第一个参数是正则表达式,匹配规则按照从上往下依次匹配,匹配到一个之后立即直接执行对应的视图函数,不在继续往下匹配

 

2、无名分组与有名分组

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

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

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

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

注意:无名分组和有名分组不能混着用,但是支持用一类型多个形式匹配(无名分组多个与有名分组多个)

 

3、无名分组多个与有名分组多个

①无名分组多个

urls.py:
       url(r^test/(\d+)/(\d+)/,views.test),
views.py:
       def test(request, xxx, year):
             print(xxx)
             print(year)
             return HttpResponse(test)

②有名分组多个

urls.py:
      url(r^test/(?P<year>\d+)/(?P<xxx>\d+)/,views.test),
views.py:
      def test(request, xxx, year):
            print(xxx, xxx)
            print(year, year)
            return HttpResponse(test)

 

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

本质: 把一个路径帮你解析出来,让你能够访问到所对应的路径,通过反向解析,返回一个结果,拿到这个结果可以访问这个视图函数

from django.shortcuts import reverse

url(r^index666/$,views.index,name=index)
            # 可以给每一个路由与视图函数对应关系起一个名字
            # 这个名字能够唯一标识出对应的路径
            # 注意这个名字不能重复是唯一的

前端使用:
         {% url 你给路由与视图函数对应关系起的别名 %}
后端使用:
     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,))

有名分组反向解析

后端使用:
   # 后端有名分组和无名分组都可以用这种形式
   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 %}
反向解析的本质:就是获取到一个能够访问名字所对应的视图函数

 

5、路由分发

 

6、名称空间(了解)

 

二、伪静态网页

 

三、虚拟环境

 

四、视图层

1、JsonReponse

 

2、FBV与CBV

 

3、文件上传

 

五十六、Django路由层与视图层

标签:动态   for   cbv   个数   数据   lis   关键字   正则表达式   解析   

原文地址:https://www.cnblogs.com/zhangguosheng1121/p/10999772.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!