ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Django学习(2)

2021-11-20 21:59:09  阅读:200  来源: 互联网

标签:articles views Django 学习 year path month archive


路由系统

用户从浏览器发出的请求会首先打到django url的路由分发系统这里,然后再到views视图->models模型->template模板->用户浏览器。

  • 换言之,urls.py 文件主载着你整个网站的所有页面&接口的url分配。
  • Django 的路由本质上是通过正则表达式来对用户请求的url进行匹配
    urls.py配置:

from django.urls import re_path
from apptest import views

 urlpatterns = [
    re_path(r'articles/2003/$', views.special_case_2003), # 静态路由
    re_path(r'articles/(?P<year>[0-9]{4})/$', views.year_archive), # 动态路由
    re_path(r'articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive), # 动态路由
    re_path(r'articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$', views.article_detail), # 动态路由
    
    # django2.0后对上面的优化
    path('articles/2003/', views.special_case_2003),
    path('articles/<int:year>/', views.year_archive),
    path('articles/<int:year>/<int:month>/', views.month_archive),
    path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]

以上路由对应views.py视图方法

def special_case_2003(request):
 
    return HttpResponse("dddd")
 
 
def year_archive(request,year):
    return HttpResponse("year_archive" + str(year))
 
 
def month_archive(request,year,month):
    return HttpResponse("month_archive %s-%s" %(year,month))
 
 
def article_detail(request,year,month,slug):
    return HttpResponse("article_detail %s-%s %s" %(year,month,slug))

Django2.0转化器(Path converters):

  1. str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
  2. int,匹配正整数,包含0
  3. slug,匹配字母、数字以及横杠、下划线组成的字符串
  4. uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00
  5. path,匹配任何非空字符串,包含了路径分隔符

自定义转换器

要求:

  1. regex 类属性,字符串类型
  2. to_python(self, value)方法,value是由属性regex所匹配到的字符串,返回具体的Python变量值,以供Django传递到对应的视图函数中
  3. to_url(self, value)方法,和to_python相反, value是一个具体的Python变量值,返回其字符串,通常用于url方向引用

样例步骤:

  1. 在mysite文件夹创建converters.py
class MyConverter:
        regex = r'[0-9]{4}'

        def to_python(self, value):
            return int(value)

        def to_url(self, value):
            return '%04d' % value
  1. 在urls.py下导入
from django.urls import path,register_converter
from . import converters
  1. 创建对象
register_converter(converters.MyConverter, 'test')
  1. 在urlpatterns中添加
 path('articles/<yyyy:year>/', views.year_archive)

标签:articles,views,Django,学习,year,path,month,archive
来源: https://blog.csdn.net/qq_52143183/article/details/121446175

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有