首页 > 其他分享 >django(路由层)

django(路由层)

时间:2023-07-29 21:44:39浏览次数:41  
标签:views url django urls test reg 路由

一、简介

# 路由匹配
url(r'test',views.test),
url(r'test_add',views.test_add)
# r'test'与请求头的数据进行正则匹配

'''
url方法第一个参数是正则表达式
    只要第一个参数正则表达式能够匹配到内容,那么就会立刻停止往下匹配
    直接执行对应的视图函数
    
在输入url的时候默认加斜杠
    django内部帮你做到重定向
        一次匹配不行
        url后面加斜杠再来一次(浏览器加/后,再请求)
'''

        
# 取消自动加斜杠
APPEND_SLASH = False   # 默认是True,自动加斜杠

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    # 首页
    url(r'^$',views.home),
    url(r'^test/$',views.test),
    url(r'^test_add$',views.test_add),
    # 尾页(了解)
    url(r'',views.error)
]

二 无名分组

分组:就是给某一段正则表达式用小括号括起来
url(r'^test/(\d+)',views.test)
def test(request,xx):
    print(xx) # xx位置参数就是(\d+)匹配到的数字
    return HttpResponse('TEST')

# 无名分组就是将括号内正则表达式匹配到的内容当作位置参数传递给后面的视图函数(args)

三 有名分组

可以给正则表达式起一个别名,\d+的别名就是year
url(r'^test_add/(?P<year>\d+)',views.test_add)
def test_add(request,year):
    print(year)
    return HttpResponse('TEST_ADD')

# 有名分组就是将括号内正则表达式匹配到的内容当作关键字参数传递给后面的视图函数(kwgs)

四 无名和有名不能混用

# 无名有名不可以混用,但同一个分组可以使用N次
url(r'^test/(\d+)/(\d+)/(\d+)', views.test),
url(r'^test_add/(?P<year>\d+)/(?P<year>\d+)/(?P<year>\d+)', views.test_add),

五 反向解析

# 通过一些方法得到一个结果,该结果可以直接访问对应的url触发视图函数

# 先给路由与视图函数起一个别名,别名不能起冲突(和static令牌的原理一样)
url(r'^func/',views.func,name='ooo')
# 反向解析
    # 后端反向解析
    from django.shortcuts import render, HttpResponse, redirect,reverse
    reverse('ooo')
    
    # 前端反向解析
    <a href="{% url 'ooo' %}">111</a>

六 无名有名分组向反向解析

# 无名分组反向解析
url(r'^index/(\d+)',views.index,name='xxx')

# 前端
{% url 'xxx' 123 %}

# 后端
reverse('xxx',args=(1,))

'''
这个数字写代码的时候应该放什么
    数字一般情况下放的是数据的主键值   数据的编辑和删除

伪代码(数据的编辑和删除),前端数据反向解析给url
def edit(request,edit_id)
    reverse('xxx',args=(edit_id))

listuser.html 数据展示页
{%for user_obj in user_queryset %}
    <a href="{% url 'xxx' user_obj.id %}">编辑</a>
{%endfor%}
点击编辑后,user_obj.id,反向解析,传给url,r'^edit_user/(\d+)',数字传给视图函数edit.
'''
# 有名分组反向解析
url(r'^func/(?P<year>\d+)/',views.func,name='ooo')

# 前端
<a href="{% url 'ooo' year=123 %}">有名分组,写法1</a>
<a href="{% url 'ooo' 123 %}">有名分组,写法2,简便写法</a>

# 后端
    # 有名分组反向解析  写法1
    print(reverse('ooo', kwargs={'year': 123}))
    # 简便写法
    print(reverse('ooo',args=(111,)))

七 路由分发

django的每一个应用都可以有自己的templates文件夹、urls.py、static文件夹
基于上述特点,django能够做到分组开发(每个人写自己的app)
作为组长,只需要将手下书写的app全部拷贝到一个新的django项目中,

然后在配置文件里,注册所有的app再利用路由分发的特点将所有的app整合起来。

当一个django项目中的url特别多的时候,总路由url.py代码非常冗余不好维护,这个时候也可以利用路由来减轻总路由的压力。

利用路由分发之后,总路由不再干路由与视图函数的直接对应关系
而是做一个分发处理,识别当前url是属于那个应用下的,直接分发给对应的应用去处理。

# 总路由
# from app01 import urls as app01_urls
# from app02 import urls as app02_urls

urlpatterns = [
    url(r'^admin/', admin.site.urls),

# 路由分发
    # url(r'^app01/', include(app01_urls)),  # 只要url前缀是app01开头 全部交给app01处理
    # url(r'^app02/', include(app02_urls)),

# 终极写法,推荐使用
    url(r'^app01/',include('app01.urls')),
    url(r'^app02/',include('app02.urls'))
# 注意事项:总路由里面的url千万不能加$结尾
]

# 子路由
from app01 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^reg/', views.reg)
]

八 名称空间(了解)

# 当多个应用出现了相同的别名,研究反向解析会不会自动识别应用前缀
# 总路由
    # 终极写法,推荐使用
    url(r'^app01/',include('app01.urls',namespace='app01')),
    url(r'^app02/',include('app02.urls',namespace='app02'))
    # 注意事项:总路由里面的url千万不能加$结尾
]

# 解析的时候
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^reg/', views.reg,name='reg')
]

def reg(request):
    # print(reverse('reg'))
    print(reverse('app01:reg'))
    return HttpResponse('app01 reg')

def reg(request):
    # print(reverse('reg'))
    print(reverse('app02:reg'))
    return HttpResponse('app02 reg')

# 只要保证名字不冲突,就没必要使用名称空间

'''
一般情况下,有多个app的时候,起别名的时候会加上app的前缀
这样的话能够确保多个app之间名字不冲突的问题
'''

九 伪静态(了解)

静态网页
数据是写死的,万年不变

伪静态
将一个动态网页伪装成静态网页

为什么要伪装
https://www.cnblogs.com/Dominic-Ji/p/10881214.html
伪装的目的在于增大本网站的seo查询力度
并且增加搜索引擎收藏本网站的概率

搜索引擎的本质上就是一个巨大的爬虫程序

总结:
无论你怎么优化,怎么处理
始终还是干不过RMB玩家

url(r'^reg.html/', views.reg,name='reg')

 

标签:views,url,django,urls,test,reg,路由
From: https://www.cnblogs.com/coderxueshan/p/17590610.html

相关文章

  • 如何在 Django 中使用 MVT 创建一个基本项目?
    Django是一种用Python编写的流行Web框架,遵循Model-View-Template(MVT)架构模式。MVT是众所周知的Model-View-Controller(MVC)模式的变体,它提供了一种构建Web应用程序的结构化方法。了解如何在Django中使用MVT创建基本项目是开发健壮且可扩展的Web应用程序的基本步骤。在本......
  • Django web框架实现nacos【多配置】修改
    Djangoweb框架实现nacos【多配置】修改基于上面一个博客进行功能升级优化,在实际场景中一般会有多个配置需要同时进行修改,上章节功能就不足满足使用了,在此基础上进行功能优化同时修改多个配置进行提交表单。1.安装依赖pipinstallnacos-sdk-pythonPyYAML 2.创建类修......
  • Python-Django-环境搭建和基础知识
    Python-Django学习目录:环境搭建和基础知识:包括安装Python和Django、了解Python基础语法、掌握Django框架的基本概念和工作原理等。模型和数据库:包括创建模型、定义字段、使用DjangoORM进行数据库操作等。视图和URL:包括定义视图函数、URL路由配置、模板渲染等。表单和验证:包括表单......
  • Django web框架实现修改【单个】nacos配置
    Djangoweb框架实现修改【单个】nacos配置基于上一个博客的Django的项目环境继续添加一些高级的功能——修改nacos配置。简单回顾一下,上面添加的功能:博客网站文章上传、发布,rediskey删除接口。1.首先安装PythonNacos客户端库pipinstallnacos-sdk-python 2.创建n......
  • Django Form源码分析(2)
    1前置知识点1.1render函数 可以看到render函数先拿到模板,再进行模板渲染那么form函数是如何自动生成表单里的input标签呢,应该是在form里已经渲染好一遍生成了input标签放进了{"form":form}的集合render函数再进行渲染2Form函数2.1Form源码分析2.1.1Form初始化......
  • 小米路由器R3G稳定2.28.44 固化SSH
    1.SSH参考恩山论坛的帖子SSH即可[R3G]R3G和R3GV2解锁SSH我做了实验R3G稳定2.28.44是可以一键SSH的。2.固化SSH帖子中SSH所使用的本质是OpenWRTInvasion原理是通过小米路由器的Rootshell漏洞上传二进制文件进而获取SSH及root但是所有的二进制文件全部上传于/tmp目录......
  • Django 之前端动态数据展示
    一、结合前端页面实现ORM对数据的增删改查1、修改和删除功能的逻辑'''修改功能的逻辑'''1、确定修改哪条记录,怎么确定?通过主键id确定唯一一条记录2、点击修改的按钮,应该跳转到一个修改的页面3、应该通过id查询到原来的数据,并且把这个记录的数据展示到修改的页面4、开始......
  • Django-4.2博客开发教程:维护后台数据admin模块(六)
    在每个app目录下有个admin.py,使用这个文件可以对其app进行控制。步骤如下:1)先在settings里对其进行注册这里在myblog\myblog\settings.py  > INSTALLED_APPS里把APP名添加进去INSTALLED_APPS=[#'blog.apps.BlogConfig',#注册APP应用'blog','django.co......
  • ORM对数据的增删改查,动静态网页,Django创建表关系,Django框架的请求生命周期流程图
    通过结合前端页面实现ORM对数据的增删改查#我让你写一个页面,就是把数据库中的数据以表格的形式展示出来,然后在每一行的后面加两个按钮,分别是修改、删除的按钮#表格的展示页面'''思考修改功能的逻辑:'''1、确定修改哪条记录,怎么确定?通过主键id确定唯一一条记录2、点击......
  • Django
    目录Web应用http协议web框架借助于wsgiref模块动静态网页python中的三大主流web框架Django框架下载安装基本命令django三板斧配置文件的介绍静态文件的配置form表单request对象的方法链接数据库(MySQL)pycharm链接数据库(MySQL)Django链接数据库(MySQL)Django的ORM操作orm针对字段......