url路由分配及模板渲染方式
新建Django项目 目录及文件说明
url基本概念及格式
概念
大家想想咱们平时访问网站是不是通过我们知道的 url 进行访问,而且要输入正确的 url 才能成功的访问。 URL(Uniform Resoure Locator)统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
格式
urls.py 的作用
URL 配置(URLconf)就像是Django所有支撑网站的目录。它的本质是URL模式以及要为该URL模式调用视图函数之间的映射表。以这样的方式告诉Django,对于哪个URL调用哪段代码。url的加载就是从配置文件中开始。
url 例子
定义一个 index1 视图函数
创建 一个 index1 路由 注意:一般路由配置应与视图函数名一致,便于寻找
启动服务后,当我们输入正确的 ur l进行访问,才会调用对应的视图函数。页面会显示 :‘这里是Django设置路由’ 这句话
而当我们输入的 url 与后台配置的 url 不一致,则找不到页面。
path 基本规则
例子
定义一个 show 的视图函数 number 为参数
创建对应的 路由 show 因视图函数中存在参数 设置路由需传递一个参数,<int:number>
为传递的参数 int 为转换器 说明传的参数一定要是数字
设置完成后,进行访问,第一次访问我们试试不带参数,结果显示 404
第二次我们传递一个不全是数字的参数进行访问,结果还是找不到页面
第三次我们 输入一个纯数字的参数进行访问, 结果成功的返回了 视图函数 中的结果
转换器
一般常用的转换器 str int ,主要记住这两个的用法
转换器的使用
re_path 基本规则
re_path 的使用 和 就是用正则的方式设置 url
第一个re_path 意思是 创建一个 hello 路由 ^
表示从什么开始 $
以什么结束
第二个re_path (?P[0-9]+) 为一个参数 [0-9] 这个参数要为纯数字, 这要符合 才会调用 test6 这个视图函数
路由分配
创建 app : 在 Linux 项目目录下输入 python manange.py startapp app_name
app_name 为自定义app 名称,创建成功后在下载到pycharm中。
注意:每次创建 app 都需到主项目的 setting.py中进行注册
include 的作用
一个project有一个总的 urls.py,各个app也可以自己建立自己的 urls.py,用include()函数在 projec t的urls.py文件进行注册
注册成功后我们到 book APP 中 设置 url 以及视图函数 注意:主项目的 path(‘admin’) 是唯一的,且 APP 创建urls.py后 urlpatterns 的格式一定要有 否则 报错
分配路由 设置 APP中的路由 和 视图函数后 进行访问
注意: 在没有分配路由时, 设置路由 以及视图函数 是没法进行访问的
kwrags 的作用
接受传递的参数,一般用于主路由在分配路由时需要向APP传递参数时使用,当给APP分配路由时传递参数,则APP的视图函数都需要 设置 **kwrags
进行接受, 视图函数中可以通过关键字参数kwrags.get('key')
获取到传递的值。如上图注释中有说明。
页面重定向
使用重定向可以减少网站客户流量的损失,就算就网站已经不能用了,但客户访问这个旧网站就能跳转到新的网站
首先我们以book APP 为例 设置两个 old new 两个路由,表示 一个旧网站,一个新网站
定义对应的视图函数
当我们访问 旧的网址时,页面会自动重定向到新的网站
name 的作用
给name参数可以给这个url取一个合适的名字。通过给url取名字,以后在view或者模板中使用这个URL,就只需要通过这个名字就可以了。这样做的原因是防止url的规则更改,会导致其他地方用了这个url的地方都需要更改,但是如果取名字了,就不要做任何改动了。
如下图,给 new 路由 取名为 new_mv
使用 redirect() 以及 reverse() 方法 即可重定向到 名为 new_mv 的url
模板渲染
- 在主目录下创建一个templates目录用来存放所有的html的模板文件.
- templates目录里面在新建各个以app名字命名的目录来存放各个app中模板文件.
- 将我们的设置好的存放 html 模板 的 templates 目录路径添加到DIRS中 (BASE_DIR 为项目的路径)
以 book APP 为例, 图下为三种 渲染方式 最为简便、常用的为 第三种
第一种直接将html字符串硬编码HttpResponse中
第二种django.template.loader 定义了函数以加载模板
第三种使用render进行渲染
以上内容都为学习后的总结,如有不正确的地方,欢迎大佬指正。