• 自制URL转换器


    自定义 url 转换器五个步骤:

    1. 定义一个类。
    2. 在类中定义一个属性  regex  ,这个属性是用来保存 url 转换器规则的正则表达式。
    3. 实现  to_python(self,value)  方法,将 url 中的值转换一下,然后传给视图函数的。
    4. 实现  to_url(self,value)  方法,做 url 反转的时候,将传进来的参数转换后拼接成一个正确的url
    5. 将定义好的转换器,注册到django中。
    6. 例子:获取列表分类(/article/list/python+django+flask)
       1 #在应用下新建converter.py文件
       2 from django.urls import converters,register_converter
       3 
       4 class CategoryConverter():
       5     regex = r'w+|(w++w+)+'
       6 
       7     def to_python(self,value):
       8         #python+django+flask
       9         #['python','django','flask']
      10         result = value.split("+")
      11         return result
      12 
      13     def to_url(self,value):
      14         #value:['python','django','flask']
      15         #python+django+flask
      16         if isinstance(value,list):
      17             reslut = '+'.join(value)
      18             return reslut
      19         else:
      20             raise RuntimeError('转换url的时候,分类参数必须为列表')
      21 
      22 register_converter(CategoryConverter,'cate')
       1 #应用的urls.py
       2 from django.urls import path,re_path
       3 from . import views
       4 
       5 urlpatterns = [
       6     path('',views.article),
       7     #w: 0-9 a-z A-Z
       8     #re_path(r'list/(?P<categories>w+|(w+ +w+)+)/',views.article_list)
       9     path('list/<cate:categories>/',views.article_list,name='list'),
      10     path('detail/<int:article_id>/',views.article_detail,name='detail')
      11 ]
       1 #应用的views.py
       2 from django.http import HttpResponse
       3 from django.shortcuts import reverse,redirect
       4 
       5 def article(request):
       6     return HttpResponse('文章首页')
       7 
       8 #定义文章列表函数,参数:分类
       9 def article_list(request,categories):
      10     text = '您填写的分类是:%s' % categories
      11     return HttpResponse(text)
      12 
      13 def article_detail(request,article_id):
      14     reverse('detail',kwargs={'article_id':article_id})
      15     return HttpResponse('文章详情')
      1 #应用的__init__.py文件
      2 from . import converters
      1 #项目的urls.py文件
      2 from django.urls import path,include
      3 
      4 urlpatterns = [
      5     path('',include('article.urls')),
      6     path('article/',include('article.urls'))
      7 ]

    7. 一个匹配四个数字年份的 url 转换器。示例代码如下:

       1 # 定义一个类
       2 class FourDigitYearConverter:
       3     regex = '[0-9]{4}'
       4     
       5     def to_python(self, value):
       6         return int(value)
       7 
       8     def to_url(self, value):
       9         return '%04d' % value
      10 
      11 # 注册到django中
      12 from django.urls import register_converter
      13 register_converter(converters.FourDigitYearConverter, 'yyyy')
      14 urlpatterns = [
      15     path('articles/2003/', views.special_case_2003),
      16     # 使用注册的转换器
      17     path('articles/<yyyy:year>/', views.year_archive),
      18 ...
      19 ]



  • 相关阅读:
    mysql5.7安装
    win10 安装docker
    快速去水印(win10换图3D工具)
    爬虫---国家食品药品监督管理总局
    食品伙伴网爬虫
    驴妈妈旅游爬虫
    天气预测(CNN)
    ConcurrentDictionary线程不安全么,你难道没疑惑,你难道弄懂了么?
    C#线程篇---线程池如何管理线程(6完结篇)
    C#线程篇---Task(任务)和线程池不得不说的秘密(5)
  • 原文地址:https://www.cnblogs.com/liqiongming/p/10296530.html
Copyright © 2020-2023  润新知