学习笔记,仅供参考

参考自: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命名与反转相关推荐

  1. Django从理论到实战(part14)--url反转

    学习笔记,仅供参考,有错必纠 参考自:Django打造大型企业官网: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽 ...

  2. Django从理论到实战(part8)--URL中添加参数

    学习笔记,仅供参考 参考自:Django打造大型企业官网: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的写 ...

  3. Django从理论到实战(part7)--关于视图函数与URL映射

    学习笔记,仅供参考 参考自:Django打造大型企业官网:URL映射 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽 ...

  4. Django从理论到实战(part12)--应用命名空间和实例命名空间

    学习笔记,仅供参考 参考自:Django打造大型企业官网: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的写 ...

  5. Django从理论到实战(part22)--include模板标签

    学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列 ...

  6. Django从理论到实战(part19)--DTL模板语法

    学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y:官方文档 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在 ...

  7. Django从理论到实战(part54)--MEDIA_ROOT和MEDIA_URL

    学习笔记,仅供参考,有错必纠 引用:使用模型来处理上传的文件:Django static静态配置文件 MEDIA_ROOT和MEDIA_URL 变量解释 MEDIA_ROOT:指定用户上传文件的本地路 ...

  8. Django从理论到实战(part50)--使用模型来处理上传的文件

    学习笔记,仅供参考,有错必纠 文章目录 使用模型来处理上传的文件 `MEDIA_ROOT`和`MEDIA_URL` 限制文件的扩展名 使用模型来处理上传的文件 在定义模型的时候,我们可以给存储文件的字 ...

  9. Django从理论到实战(part41)--WSGIRequest对象

    学习笔记,仅供参考,有错必纠 参考自:Django打造大型企业官网–Huang Y: 文章目录 WSGIRequest对象 WSGIRequest对象常用属性 WSGIRequest对象常用方法 WS ...

最新文章

  1. antd 侧边栏如何自适应高度
  2. koa mysql模块_koa 项目中引入 mysql
  3. python真的那么火吗-前言、Python是真的火,还是炒得火?来看看它的前世和发展...
  4. zencart分类页每页显示产品数量自定义选择的方法
  5. reactjs使用eject暴露webpack核心配置
  6. html5语法参考图片,仿AS语法来写HTML5—第1章,显示一张图片
  7. java 人脸识别 demo_java引用Arcface,实现人脸识别(demo)
  8. Pycharm 项目无法导入自己写的模块(问题记录贴)
  9. servle 3.0 新特性之一 对上传表单的支持
  10. 找连续数(HDU-5247)
  11. PyTorch多GPU并行训练方法及问题整理
  12. find grep xargs
  13. 【论文笔记】一种有效攻击BERT等模型的方法
  14. 最后2天,BDTC 2019早鸟票即将售罄,超强阵容及议题抢先曝光!
  15. Web Api 返回图片流给前端
  16. linux执行hadoop程序,gcc编译和运行hadoop c api程序
  17. 接口压力测试工具(推荐)
  18. Cousera - Deep Learning - 课程笔记 - Week 5
  19. win10系统去除桌面图标小箭头
  20. java 将html转为word导出 (富文本内容导出word)

热门文章

  1. mysql练习用的数据集下载(转载+自己补充步骤)
  2. 云主机上mysql密码重置
  3. 主体ubuntu16.04,宿体virtualbox下的windows7的共享文件夹设置
  4. 深圳乐易网络有限公司机试题String to Integer (atoi)
  5. 训练网络指定层pytorch实现方法
  6. 机器学习(四)——SVM(2)
  7. 【机器学习】朴素贝叶斯(Naive Bayes)
  8. 去掉IntelliJ IDEA 中 mybatis 对应的 xml 文件警告
  9. python使用ffmpeg截取视频段
  10. 源码编译依赖关系一例小结