博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django路由分发【>=2.2.X】
阅读量:4579 次
发布时间:2019-06-08

本文共 5004 字,大约阅读时间需要 16 分钟。

文章目录

一:url模块化

1:url为什么需要模块化

Django 项目里多个app目录共用一个 urls 容易造成混淆,后期维护也不方便

2:url模块化实现

  • 在每个 app 目录里都创建一个 urls.py 文件
  • 在项目名称目录下的 urls 文件里,统一将路径分发给各个 app 目录

2.1:在app下新建urls.py文件

在这里插入图片描述

2.2:在项目名称目录项下的urls文件,统一做转发

from django.urls import path, include'''    app urls,由项目urls转发而来'''urlpatterns = [		#路由转发  在app下新建urls,在项目urls下进行路由转发,include中写AppName.urls    path('zhylbwg/',include("zhylbwg.urls")),]

2.3:在app的urls中导入视图并进行url-视图映射

from django.urls import path, include# 导入视图至app urls中from zhylbwg.views import login'''    app urls,由项目urls转发而来'''urlpatterns = [    path("zhylbwg/login/", login.login),]

2.4:测试

在这里插入图片描述

二:url反向解析

1:url为什么需要反向解析

  • 随着功能的增加,路由层的 url 发生变化,就需要去更改对应的视图层和模板层的 url,非常麻烦,不便维护
  • 这时我们可以利用反向解析,当路由层 url 发生改变,在视图层和模板层动态反向解析出更改后的 url,免去修改的操作

2:url反向解析实现

反向解析一般用在模板中的超链接及视图中的重定向

2.1:模板超链接

目录结构:

在这里插入图片描述

  • 在app的urls中给路由起名别 name=‘路由别名’
from django.urls import path, includefrom zhylbwg.views import loginfrom zhylbwg.views import urlPratice'''    app urls,由项目urls转发而来'''urlpatterns = [    path("zhylbwg/login/", login.login),    path('zhylbwg/register/', login.register),    # 名别路由    path('getRegisterMessage/',urlPratice.reversePractice,name='getRegisterMess')]
  • 在views中定义返回前端的模板
from django.shortcuts import render,HttpResponsedef reversePractice(request):    return render(request,'master/register.html')
  • 在模板 templates 中的 HTML 文件中,利用 {% url “路由别名” %} 反向解析。
    
系统注册

用户类型:

用户名:

用户密码:

手机号码:

地址:

年龄:

  • 查看反向解析结果
    在这里插入图片描述

2.2:视图重定向

目录结构:

在这里插入图片描述

  • 在app的urls中给路由起名别 name=‘路由别名’
from django.urls import path, includefrom zhylbwg.views import loginfrom zhylbwg.views import urlPratice'''    app urls,由项目urls转发而来'''urlpatterns = [    path("zhylbwg/login/", login.login),    path('zhylbwg/register/', login.register),    # 名别路由    path('getRegisterMessage/',urlPratice.reversePractice,name='getRegisterMess'),    # 视图重定向    path('viewRedirect/',urlPratice.viewsRedirect)]
  • 在 views.py 中,从 django.urls 中引入 reverse,利用 reverse(“路由别名”) 反向解析
# 引入HttpResponseRedirectfrom django.http import HttpResponseRedirectfrom django.shortcuts import render,HttpResponse# 引入reverse反向解析from django.urls import reversedef reversePractice(request):    return render(request,'master/register.html')def viewsRedirect(request):    # 使用HttpResponseRedirect进行重定向    return HttpResponseRedirect(reverse('getRegisterMess'))
  • 访问测试

输入地址:

在这里插入图片描述

三:url命名空间

1:url为什么需要命名空间

路由别名 name 没有作用域,Django 在反向解析 URL 时,会在项目全局顺序搜索,当查找到第一个路由别名 name 指定 URL 时,立即返回。当在不同的 app 目录下的urls 中定义相同的路由别名 name 时,可能会导致 URL 反向解析错误

2:url命名空间实现

  • 定义一个命名空间在项目名称urls路径下
# 命名空间格式include(("appName:urls","命名空间名称"))
urlpatterns = [    # 路由转发  在app下新建urls,在项目urls下进行路由转发并给定命名空间    path(r'zhylbwg/',include(("zhylbwg.urls","zhylbwg"))),]
  • 在 views.py 中,从 django.urls 中引入 reverse,利用 reverse(“命名空间名:路由别名”) 进行反向解析
from django.http import HttpResponseRedirectfrom django.shortcuts import render,HttpResponsefrom django.urls import reversedef viewsRedirect(request):    return HttpResponseRedirect(reverse('zhylbwg:getRegisterMess'))
  • 在模板 templates 中的 HTML 文件中,利用 {% url “命名空间名:路由别名” %} 反向解析
    
系统注册

用户类型:

用户名:

用户密码:

手机号码:

地址:

年龄:

  • 访问测试

输入地址:

在这里插入图片描述

四:url正则路径

在这里插入图片描述

  • django的urls中使用 re_path:用于正则路径,需要自己手动添加正则首位限制符号
from django.urls import path, re_pathfrom zhylbwg.views import loginurlpatterns = [    # 正则匹配路径    re_path(r"^login/id=?[0-6]{4}/$",login.login)]
  • 定义视图
import jsonfrom zhylbwg.models import loginModelsfrom zhylbwg.views import md5  # 导入自定义md5加密函数from zhylbwg.views import requestResult  # 导入自定义的统一返回函数from django.shortcuts import render, HttpResponsedef login(request):    if request.method == 'POST':        # 获取请求头数据,请求以json的格式传输        loginInfor = request.body        loginInformation = json.loads(loginInfor)        # 获取用户名        userName = loginInformation.get('userName')        # 判断该用户名是否存在        userNameDB = loginModels.Userinfo.objects.filter(userName=userName)        print(userNameDB.values_list('userName')[0])        if len(userNameDB) == 0:            return HttpResponse(json.dumps(requestResult.result_json('202', '该用户名不存在,请注册', '')),                                content_type="application/json,charset=utf-8")        else:            '''                判断密码是否正确            '''            # 得到前端传过来的密码            userPwd = loginInformation.get('userPwd')            # 使用mdb进行加密            userPwdMd5 = md5.Md5(userPwd)            # 根据同用户名从数据库中获取密码            checkLogin = loginModels.Userinfo.objects.get(userName=userName)            # 比较2个密码是否一致            if userPwdMd5 == checkLogin.userPwd:                # 若一致,则登录成功                return HttpResponse(json.dumps(requestResult.result_json('203', '登录成功', '')),                                    content_type="application/json,charset=utf-8")            else:                return HttpResponse(json.dumps(requestResult.result_json('504', '密码错误', '')),                                    content_type="application/json,charset=utf-8")
  • 测试
    在这里插入图片描述

注意:基于正则的url反向解析及命名空间同样使用

转载地址:http://eaqms.baihongyu.com/

你可能感兴趣的文章
[WPF 容易忽视的细节] —— x:Name与Name属性
查看>>
非小型电子商务系统设计经验分享
查看>>
WPF之路——实现自定义虚拟容器(实现VirtualizingPanel)
查看>>
SignalR---DOTNET客户端
查看>>
CSS实现进度条和订单进度条
查看>>
[老老实实学WCF] 第三篇 在IIS中寄存服务
查看>>
进化计算简介和遗传算法的实现--AForge.NET框架的使用(六)
查看>>
一个防止误删MSSQL数据库的方法
查看>>
挖一挖C#中那些我们不常用的东西之系列(2)——IsXXX 系列方法
查看>>
挖一挖C#中那些我们不常用的东西之系列(5)——FlagAttribute
查看>>
基于4.5Framework web程序、SQLSERVER数据库打包
查看>>
JavaScript判断数据类型总结
查看>>
studio-3t-x64 下载地址
查看>>
hybrid小了解
查看>>
Oracle对象之存储过程
查看>>
Daily Scrum02 12.10
查看>>
php value inférieur et supérieur
查看>>
游戏文件包逆向笔记
查看>>
常用验证正则表达式
查看>>
利用python进行数据分析--pandas入门1
查看>>