Django从理论到实战(part10)--URL命名与反转
学习笔记,仅供参考
参考自:Django打造大型企业官网;
本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的写一下。
URL命名与反转
学前准备
- 创建两个新的APP
创建front应用,用于管理前台相关代码:
python manage.py startapp front
创建cms应用,用于管理后台相关代码:
python manage.py startapp cms
- 对两个APP进行配置
settings.py:
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','book','cms','front',
]
URL命名及反转
- 情况1(url命名不冲突)
cms应用下的urls.py:
from django.urls import path
from . import viewsurlpatterns = [path('', views.index),path('login/', views.login),
]
front应用下的urls.py:
from django.urls import path
from . import viewsurlpatterns = [path('', views.index),path('login/', views.login),
]
主urls.py:
from django.contrib import admin
from django.urls import path
from . import views
from django.conf.urls import includeurlpatterns = [path('admin/', admin.site.urls),path('', views.baidu),path('login/', views.login, name = "signin"),path('book/', include('book.urls')),path('cms/', include('cms.urls')),path('front/', include('front.urls')),
]
在主urls.py中,对代表登录页面的url进行命名。
cms应用下的views.py:
from django.http import HttpResponse
# Create your views here.def index(request):return HttpResponse("CMS首页")def login(request):return HttpResponse("CMS登录页面")
front应用下的views.py:
from django.http import HttpResponse
from django.shortcuts import redirect,reverse# Create your views here.def index(request):username = request.GET.get("username", "")if username:return HttpResponse("front首页")else:login_url = reverse('signin')#利用url的name参数反转得到相应的urlprint("-+"*15)print(login_url)print("-+"*15)return redirect(login_url)def login(request):return HttpResponse("front登录页面")
利用url的name参数进url反转,跳转到主页的登录界面。
主views.py
from django.http import HttpResponseRedirect
from django.http import HttpResponsedef baidu(request):return HttpResponseRedirect("https://www.baidu.com/")def login(request):return HttpResponse("主页的登录页面")
现在,我们在浏览器中输入http://127.0.0.1:8000/front/:
回车,跳转到首页的登录界面:
控制台输出:
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/login/
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
[03/Jul/2020 07:34:16] "GET /front/ HTTP/1.1" 302 0
[03/Jul/2020 07:34:16] "GET /login/ HTTP/1.1" 200 21
- 情况2(url命名冲突)
当url命名出现冲突的情况下,即在开发过程中,在不同应用中,设置相同的url的name参数的情况,这样可能就可能出现url反转的混乱。
这时,我们可以通过给app起名字的方式,即设置应用命名空间app_name变量,解决该问题。同时,在视图函数中,我们还需要用命名空间:name
的方式对url进行反转。
front应用下的urls.py:
app_name = 'front'urlpatterns = [path('', views.index),path('login/', views.login, name = "signin"),
]
cms应用下的urls.py:
app_name = 'cms'urlpatterns = [path('', views.index),path('login/', views.login, name = "signin"),
]
front应用下的views.py:
def index(request):username = request.GET.get("username", "")if username:return HttpResponse("front首页")else:login_url = reverse('cms:signin')#利用url的name参数反转得到相应的urlprint("-+"*15)print(login_url)print("-+"*15)return redirect(login_url)def login(request):return HttpResponse("front登录页面")
跳转到cms应用的登录页面。
cms应用下的views.py:
from django.http import HttpResponse
# Create your views here.def index(request):return HttpResponse("CMS首页")def login(request):return HttpResponse("CMS登录页面")
现在,我们向http://127.0.0.1:8000/front/发起请求:
可以看到,页面跳转到了CMS的登录界面。
查看控制台输出:
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/cms/login/
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
[03/Jul/2020 07:56:30] "GET /front/ HTTP/1.1" 302 0
[03/Jul/2020 07:56:30] "GET /cms/login/ HTTP/1.1" 200 15
Django从理论到实战(part10)--URL命名与反转相关推荐
- Django从理论到实战(part14)--url反转
学习笔记,仅供参考,有错必纠 参考自:Django打造大型企业官网: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽 ...
- Django从理论到实战(part8)--URL中添加参数
学习笔记,仅供参考 参考自:Django打造大型企业官网: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的写 ...
- Django从理论到实战(part7)--关于视图函数与URL映射
学习笔记,仅供参考 参考自:Django打造大型企业官网:URL映射 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽 ...
- Django从理论到实战(part12)--应用命名空间和实例命名空间
学习笔记,仅供参考 参考自:Django打造大型企业官网: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的写 ...
- Django从理论到实战(part22)--include模板标签
学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列 ...
- Django从理论到实战(part19)--DTL模板语法
学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y:官方文档 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在 ...
- Django从理论到实战(part54)--MEDIA_ROOT和MEDIA_URL
学习笔记,仅供参考,有错必纠 引用:使用模型来处理上传的文件:Django static静态配置文件 MEDIA_ROOT和MEDIA_URL 变量解释 MEDIA_ROOT:指定用户上传文件的本地路 ...
- Django从理论到实战(part50)--使用模型来处理上传的文件
学习笔记,仅供参考,有错必纠 文章目录 使用模型来处理上传的文件 `MEDIA_ROOT`和`MEDIA_URL` 限制文件的扩展名 使用模型来处理上传的文件 在定义模型的时候,我们可以给存储文件的字 ...
- Django从理论到实战(part41)--WSGIRequest对象
学习笔记,仅供参考,有错必纠 参考自:Django打造大型企业官网–Huang Y: 文章目录 WSGIRequest对象 WSGIRequest对象常用属性 WSGIRequest对象常用方法 WS ...
最新文章
- antd 侧边栏如何自适应高度
- koa mysql模块_koa 项目中引入 mysql
- python真的那么火吗-前言、Python是真的火,还是炒得火?来看看它的前世和发展...
- zencart分类页每页显示产品数量自定义选择的方法
- reactjs使用eject暴露webpack核心配置
- html5语法参考图片,仿AS语法来写HTML5—第1章,显示一张图片
- java 人脸识别 demo_java引用Arcface,实现人脸识别(demo)
- Pycharm 项目无法导入自己写的模块(问题记录贴)
- servle 3.0 新特性之一 对上传表单的支持
- 找连续数(HDU-5247)
- PyTorch多GPU并行训练方法及问题整理
- find grep xargs
- 【论文笔记】一种有效攻击BERT等模型的方法
- 最后2天,BDTC 2019早鸟票即将售罄,超强阵容及议题抢先曝光!
- Web Api 返回图片流给前端
- linux执行hadoop程序,gcc编译和运行hadoop c api程序
- 接口压力测试工具(推荐)
- Cousera - Deep Learning - 课程笔记 - Week 5
- win10系统去除桌面图标小箭头
- java 将html转为word导出 (富文本内容导出word)