Django后端开发:MVC 和 MTV以及动态路由、静态路由、自定义converters

编程入门 行业动态 更新时间:2024-10-13 18:19:38

Django后端开发:MVC 和 MTV以及动态<a href=https://www.elefans.com/category/jswz/34/1771390.html style=路由、静态路由、自定义converters"/>

Django后端开发:MVC 和 MTV以及动态路由、静态路由、自定义converters

 

目录

 

一、MVC和MTV

 二、静态路由和动态路由

        一、通过正则表达式来实现静态和动态路由

        二、不适用正则表达式来实现静态和动态路由

                一、常用的四种url路由

          二、自定义转换器url路由类型


 

 

一、MVC和MTV

 

 MVC控制器Contorller部分,由Django框架的urlconf来实现

意思就是在Django框架当中,我们可以忽略对Controller的代码书写

MVC:         VIEWS负责业务逻辑处理+数据展示

MTV:          Views  ——业务逻辑处理         

                Templates—— 数据展示

Django采用了 MTV 的框架模式,即模型(Model)、模板(Template)和视图(Views),三者之间负责不同的职责。

  • 模型:数据存储层,处理与数据相关的所有事务,例如如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。负责业务对象与数据库的对象(orm)。
  • 模板:表现层,处理与表现相关的决定,例如如何在页面或其他类型的文档中进行显示。
    Django作为Web框架,需要一种很便利的方法动态的生成HTML网页,因此有了模板这个概念。模板包含所需HTML的部分代码以及一些特殊的语法,特殊语法用于描述如何将视图传递的数据动态插入HTML网页中。
    Django可以配置一个或多个模板引擎(甚至是0个,如前后端分离,Django只提供API接口,无需使用模板引擎),模板引擎有Django模板语言(DTL)和Jinja2。Django模板语言是Django内置的功能之一,Jinja2是当前Python流行的模板语言。
  • 视图:业务逻辑层,存取模型及调取恰当模板的相关逻辑,模型与模板的桥梁。主要负责处理用户请求和生成相应的相应内容,然后在页面或其他类型文档中显示。也可以理解为视图是MVC架构里面的C部分(控制器),主要处理功能和业务上的逻辑。我们习惯使用视图函数处理HTTP请求,记载视图里定义def函数,这种方式成为FBV(Function Base Views)。

 

 二、静态路由和动态路由

        一、通过正则表达式来实现静态和动态路由

Django 的路由本质上是通过正则表达式来对用户请求的Url 进行匹配

#  代表必须寻找以$字符是指以2003结尾#  ^articles/2003/$ 前面再加个^代表必须以articles开头2003结尾#前面加的r ————代表原始字符串匹配re_path(r'^articles/2003/$',views.atricle_2003), #静态语句#分组匹配,动态寻找# ^articles代表必须以articles开头,()代表动态匹配规则要以年份year结尾,{4}代表0-9中任意四位都可以满足re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$',views.atricle_archive),#取消   ?P<year> 相当于取消键值对前面固定死的键值re_path(r'^articles/([0-9]{4})/([0-9]{2})/$',views.atricle_archive2),#\w :代表任意的大小写字母,并且包含任意的数字 \w-:前面的同时再加上一个双横线  +代表一个或者多个#下面这个是常见的动态路由re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$',views.atricle_archive3),#\d表示数字,+代表一个或者多个   \d+代表一个或者多个数字re_path(r'^articles/(?P<arg1>[0-9]{4})/(?P<arg2>\d+)/(?P<slug>[\w-]+)/$', views.atricle_archive4)

       ①代表必须寻找以$字符是指以2003结尾
      ^articles/2003/$ 前面再加个^代表必须以articles开头2003结尾
    #前面加的r ————代表原始字符串匹配
    re_path(r'^articles/2003/$',views.atricle_2003), #静态语句

views界面代码:

def atricle_2003(request):return HttpResponse('article 2003')

运行图:

         

          ② 分组匹配,动态寻找
    # ^articles代表必须以articles开头,()代表动态匹配规则要以年份year结尾,{4}代表0-9中任意四位都可以满足
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$',views.atricle_archive)

views界面代码:

def atricle_archive(request,year,month):return HttpResponse('article 动态 %s-%s'% (year,month))

 运行图如下:

         ③re_path(r'^articles/([0-9]{4})/([0-9]{2})/$',views.atricle_archive2),
    \w :代表任意的大小写字母,并且包含任意的数字 \w-:前面的同时再加上一个双横线  +代表一个或者多个

views界面代码:

def atricle_archive2(request,arg1,arg2):return HttpResponse('article 动态 %s----%s'% (arg1,arg2))

运行代码图:

         

 ④下面这个是常见的动态路由
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$',views.atricle_archive3),
    #\d表示数字,+代表一个或者多个   \d+代表一个或者多个数字
    re_path(r'^articles/(?P<arg1>[0-9]{4})/(?P<arg2>\d+)/(?P<slug>[\w-]+)/$', views.atricle_archive4)

views界面代码:

def atricle_archive3(request,year,month,slug):return HttpResponse('article year month slug 动态 %s %s %s' %(year,month,slug))
def atricle_archive4(requst,arg1,arg2,slug):return HttpResponse('acticles %s %s %s'%(arg1,arg2,slug))

运行代码图:

         

 

        二、不适用正则表达式来实现静态和动态路由

                一、常用的四种url路由

 Django 2.0 推荐了新用法path

path('article_2009',views.article_2009),path('articles/<int:year>/',views.article_year),path('articles/<int:year>/<int:month>/',views.article_year_month),path('articles/<int:year>/<int:month>/<slug:slug>',views.article_year_month_slug),#str 匹配不为空的字符串,除了‘/’path('articles/<str:name>/',views.article_name),#uuid 唯一编码path('articles/<uuid:uuid>/',views.article_uuid),#path 可以匹配任何非空字符串,并且包含 ‘/’path('articles/<path:wangzhi>',views.article_path),# converters 自定义路由urlpath('articles/<YYY:year>',views.converters)

①path('articles/<int:year>/',views.article_year)

views视图代码:

def article_year(request,year):return HttpResponse('Hello,今年是%s年'%year)

运行结果:

②path('articles/<int:year>/<int:month>/',views.article_year_month)

views视图代码:

def article_year_month(request,year,month):return HttpResponse('Helo,今年是%s年,%s月'%(year,month))

运行结果展示:

 

③path('articles/<int:year>/<int:month>/<slug:slug>',views.article_year_month_slug)

views视图代码:

def article_year_month_slug(request,year,month,slug):       #slug可以代表任意的大小写字母和数字return HttpResponse('Helo,今年是%s年,%s月任意的大小写字母和数字slug为:%s'%(year,month,slug))

运行结果展示:

 

④path('articles/<str:name>/',views.article_name)

views视图代码:

def article_name(request,name):return HttpResponse('文章的名字为:%s'%name)

运行结果展示:

⑤ path('articles/<uuid:uuid>/',views.article_uuid)

views视图代码:

def article_uuid(request,uuid):return HttpResponse('特殊编码%s:'%uuid)

运行结果展示:

 

⑥path('articles/<path:wangzhi>',views.article_path)

views视图代码:

def article_path(request,wangzhi):return HttpResponse('path指定网址%s:'%wangzhi)

运行结果展示:   

 

          二、自定义转换器url路由类型

urls界面代码:

from django.urls import path,re_path,register_converter
from . import converters
def converters(request,year):return HttpResponse('converters自定义年份YYY为:%s'%year)

converters.py界面代码:

class YearConvert:regex=r'[0,9]{4}'def to_python(self,value):return int(value)def to_url(self,value):return "%04d"

views界面代码:

def converters(request,year):return HttpResponse('converters自定义年份YYY为:%s'%year)

运行界面图:

 

 

 

更多推荐

Django后端开发:MVC 和 MTV以及动态路由、静态路由、自定义converters

本文发布于:2024-03-09 16:55:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1725531.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:路由   自定义   静态   后端   动态

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!