当前位置: 首页 > article >正文

第55天:django学习(四)

路由层

url(r'^test/$', views.test),
url(r'testadd', views.testadd),
## 首页的地址
url(r'^$', views.home),

# django2中
path('admin/', admin.site.urls), # 精准匹配,不支持正则表达式
path('test/', views.test), # 精准匹配,不支持正则表达式
re_path(r'^test/$', views.test) # url(r'^test/$', views.test),


# url方法的第一个参数支持的是正则表达式

        Django中路由的作用:  

        URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行

        django中路由的配置:

from django.conf.urls import url

urlpatterns = [
     url(正则表达式, views视图函数,参数,别名),
]
  • 正则表达式:一个正则表达式字符串

  • views视图函数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串

  • 参数:可选的要传递给视图函数的默认参数(字典形式)

  • 别名:一个可选的name参数

        以上是django1版本的路由配置,django2及以上版本的配置如下:

path(地址, views视图函数,参数,别名)
re_path(正则表达式, views视图函数,参数,别名)
  • path精准匹配,不支持正则表达式

  • re_path相当于django1版本中的url,支持正则表达式

无名分组和有名分组

无名分组传位置参数

        无名分组如何传参?

        就是把正则中小括号里的匹配到的内容以位置参数的形式传递给视图函数    

        在路由层传递一个位置参数,如

url(r'^test/(\d+)$', views.test),

         此时,视图层中的视图函数应添加一个参数进行接收,如

def test(request,xx):
        pass

 有名分组传关键字参数

        有名分组如何传参?

        就是把正则中小括号里的匹配到的内容以关键字参数的形式传递给视图函数

        在路由层传递一个关键字参数,如

	url(r'^test/(?P<name>\d+)$', views.test),

         此时,视图层中的视图函数应添加一个参数进行接收,如

def test(request,name):
        pass
  • 视图函数中接收参数的名字必须和路由层中有名分组的名字相同  

反向解析

        在使用Django 项目时,一个常见的需求是获得URL 的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等)。人们强烈希望不要硬编码这些URL(费力、不可扩展且容易产生错误)或者设计一种与URLconf 毫不相关的专门的URL 生成机制,因为这样容易导致一定程度上产生过期的URL。

        在需要URL 的地方,对于不同层级,Django 提供不同的工具用于URL 反查:

  • 在模板中:使用url 模板标签。

  • 在Python 代码中:使用from django.urls import reverse函数

        url.py中配置

from django.urls import path,re_path
from app01 import views
urlpatterns = [
   url(r'^v1/v2/v3/home$', views.home, name='home'),
]

        模板中的反向解析

<a href="{% url 'home' %}">点我</a>

        视图函数 

res=reverse('home')

路由分发

        随着项目的复杂程度越来越来越大,路由肯定也是越来越多,路由文件就会增加很多的路由地址,就会导致路由文件很混乱,不好管理,也不够清晰,我们可以把总路由文件进行拆分,拆分到各个应用下面去,每一个应用都可以有自己的路由文件。Django的全局路由文件是urls.py这个文件。

        总路由文件

from django.urls import path,re_path,include
from app01 import views
from app01 import urls

urlpatterns = [ 
	url(r'^app01/', include('app01.urls')),
]

        在创建的应用app01里创建一个子路由文件

from django.urls import path,re_path
from app01 import views
urlpatterns = [
	url(r'^test/(?P<year>[0-9]{2})/$',views.url_test), 
]
  • 路由分发之后,总路由文件就不在作为地址匹配了,只是为了分发而已

  • 分发的路由第一个参数最后一个不要加 $

伪静态

        什么是伪静态?

        其实就是把动态页面伪装成静态页面

        动态页面:

        不是在html页面中写死的,而是根据后端的数据变化而变化,我们的页面上的数据是从数据库查询出来都是可以是动态页面 

        静态页面有哪些?

        html、css等 

        伪装的目的:

        为了更好的被各大搜索引擎抓大,静态页面是最容易被抓到的,有个别的网站就会做伪装,比如seo 

        如何伪装?在路由层中进行伪装,如:  

url(r'^v1/v2/test.html/$', views.test)


http://www.kler.cn/a/161783.html

相关文章:

  • 红帽认证和华为认证哪个好?看完这4点你就明白了
  • RAFT: Recurrent All-Pairs Field Transforms for Optical Flow用于光流估计的循环全对场变换
  • Dial-insight:利用高质量特定领域数据微调大型语言模型防止灾难性遗忘
  • 基于MATLAB+opencv人脸疲劳检测
  • Android 进入浏览器下载应用,下载的是bin文件无法安装,应为apk文件
  • 游戏引擎学习第七天
  • 26.Python 网络爬虫
  • MATLAB - 绘制立体图(平面+水深)
  • 基于Amazon Bedrock介绍大语言模型
  • 分布式训练类的定义以及创建分布式模型
  • QT 重定向qdebug输出到自绘界面
  • 区分node,npm,nvm
  • uni-app实现安卓原生态调用身份证阅读器读卡库读身份证和社保卡、银行卡、IC卡等功能
  • 匹配不包含同时出现两次 “ago“ 的行
  • Redis server启动源码
  • vue 商品列表案例
  • JavaSE基础50题:11. 输出一个整数的每一位
  • CentOS 7.9 安装 k8s(详细教程)
  • Vue.js实现可编辑表格并高亮修改的单元格
  • 基于remix+metamask+ganache的智能合约部署调用
  • 注解 @Autowired 和 @Resource
  • OpenGL ES 帧缓冲对象介绍和使用示例
  • AI烟火识别智能视频分析系统解决方案
  • Dockerfile详解#如何编写自己的Dockerfile
  • Matlab 用矩阵画图
  • JAVA 多线程并发(一)