Django 项目里多个app目录共用一个 urls 容易造成混淆,后期维护也不方便
from django.urls import path, include
'''
app urls,由项目urls转发而来
'''
urlpatterns = [
#路由转发 在app下新建urls,在项目urls下进行路由转发,include中写AppName.urls
path('zhylbwg/',include("zhylbwg.urls")),
]
from django.urls import path, include
# 导入视图至app urls中
from zhylbwg.views import login
'''
app urls,由项目urls转发而来
'''
urlpatterns = [
path("zhylbwg/login/", login.login),
]
反向解析一般用在模板中的超链接及视图中的重定向
from django.urls import path, include
from zhylbwg.views import login
from zhylbwg.views import urlPratice
'''
app urls,由项目urls转发而来
'''
urlpatterns = [
path("zhylbwg/login/", login.login),
path('zhylbwg/register/', login.register),
# 名别路由
path('getRegisterMessage/',urlPratice.reversePractice,name='getRegisterMess')
]
from django.shortcuts import render,HttpResponse
def reversePractice(request):
return render(request,'master/register.html')
<html lang="en">
<head>
<meta charset="UTF-8">
<title>系统注册title>
head>
<body>
from django.urls import path, include
from zhylbwg.views import login
from 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)
]
# 引入HttpResponseRedirect
from django.http import HttpResponseRedirect
from django.shortcuts import render,HttpResponse
# 引入reverse反向解析
from django.urls import reverse
def reversePractice(request):
return render(request,'master/register.html')
def viewsRedirect(request):
# 使用HttpResponseRedirect进行重定向
return HttpResponseRedirect(reverse('getRegisterMess'))
输入地址:http://127.0.0.1:8090/zhylbwg/viewRedirect/ 会重定向到 地址:http://127.0.0.1:8090/zhylbwg/getRegisterMessage/
路由别名 name 没有作用域,Django 在反向解析 URL 时,会在项目全局顺序搜索,当查找到第一个路由别名 name 指定 URL 时,立即返回。当在不同的 app 目录下的urls 中定义相同的路由别名 name 时,可能会导致 URL 反向解析错误
# 命名空间格式
include(("appName:urls","命名空间名称"))
urlpatterns = [
# 路由转发 在app下新建urls,在项目urls下进行路由转发并给定命名空间
path(r'zhylbwg/',include(("zhylbwg.urls","zhylbwg"))),
]
from django.http import HttpResponseRedirect
from django.shortcuts import render,HttpResponse
from django.urls import reverse
def viewsRedirect(request):
return HttpResponseRedirect(reverse('zhylbwg:getRegisterMess'))
<html lang="en">
<head>
<meta charset="UTF-8">
<title>系统注册title>
head>
<body>
输入地址:http://127.0.0.1:8090/zhylbwg/viewRedirect/ 会重定向到 地址:http://127.0.0.1:8090/zhylbwg/getRegisterMessage/
from django.urls import path, re_path
from zhylbwg.views import login
urlpatterns = [
# 正则匹配路径
re_path(r"^login/id=?[0-6]{4}/$",login.login)
]
import json
from zhylbwg.models import loginModels
from zhylbwg.views import md5 # 导入自定义md5加密函数
from zhylbwg.views import requestResult # 导入自定义的统一返回函数
from django.shortcuts import render, HttpResponse
def 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反向解析及命名空间同样使用