django路由原理(详解django中url路由配置及渲染方式)
django路由原理
详解django中url路由配置及渲染方式今天我们学习如何配置url、如何传参、如何命名、以及渲染的方式,内容大致有以下几个方面。
- 创建视图函数并访问
- 创建app
- django中url规则
- 捕获参数
- 路径转换器
- 正则表达式
- 额外参数
- 渲染方式
创建视图并访问
项目中自带的python文件中,并没有带有视图,因此我们自己创建一个,通常,我们把视图命名views.py。
然后在views.py中,导入头文件
|
from django.http import httpresponse |
然后我们在views.py中,写一些python函数,用来访问
|
def hello(request): / * request用户的请求 * / return httpresponse(‘hello,欢迎来到django') |
在url.py中为视图函数配置路由
|
from django.urls import path from . import views urlpatterns = [ path( 'hello' ,hello), ] |
运行项目,如果上传方式是ctrl+s的话,记得上传之后再运行,成功后
浏览器输入 127.0.0.1:8000/hello 即可访问到
创建app
创建app的方式不只一种,在虚拟机里可以创建,也可以在pycharm里创建
命令为:python manage.py startapp appname
在虚拟机里创建完,要在pycharm中下载下来
在pycharm中创建:
方式一:
项目运行成功后,在terminal里面找到本项目,输入命令 python manage.py startapp appname
如果没有连接本地,则需要重新连接
方式二:
tool ----> run manage.py projectname
startapp appname
此方法也需要下载下来
下载完成后,创建的app就出现了。
url规则
1、网址组成
网址:全球统一资源定位符
https://www.i.cnblogs.com/editposts.aspx?postid=10423125
这是本文网址,做个栗子吧
https://www.i.cnblogs.com/editposts.aspx?postid=10423125
协议 域名 路径 参数
django只搜索路径部分,与其他都无关
2、django的路由系统
当一个请求来到
1、首先到项目目录下,url.py里查找路由规则
2、跟urlconf模块,里面定义了urlpatterns变量
3、按顺序运行每一个,到第一个匹配的模式停止
4、一旦匹配,django导入并调用给定的视图
5、如果没有匹配到,或者中间出错,则返回404
3、path里参数的含义
|
path(route,view,kwargs = none,name = none) |
route : (必须有)是一个字符串的url规则
view : (必须有)是个视图
kwargs :(可有可无)额外参数,是字典类型,传递给view
name :(可有可无)url名字
4、在url中捕获参数
尖括号 < 参数 > 可以捕获参数,传递给视图
本来捕获的值是字符串
如果要捕获两个参数,尖括号间可用/斜杠,也可用-连接符,但访问要一致
5、路径转化器
如果想要让捕获的参数符合条件,那么我们会用到路径转化器
符号是冒号 : eg:<int:age>
常用的路径转化器
- int : 匹配任意整数
- path : 匹配任意非空字符
- str : 匹配除了 / 路径分隔符外所有字符串
- uuid : 格式化id
- sulg : 匹配任意ascii字符和连字符及下划线
6、正则表达式
前面我们学习到路径转化器,但是有时候我们的转化器并不能够完全满足我们捕获参数的条件,像int转化器去捕获年份,如果我们传入10000,肯定会捕获呀,但不合理,因此,我们正则表达式可以更好用一些。
使用时,首先要导入进来 form django.url import re_path
参数跟path里相同
下面看正则表达式的方法用什么捕获方式
第一种是分组的,在视图中根据参数名传参
|
re_path(r 'plan/(?p<year>\d\d\d\d)/(?p<month>[0-9]|1[0-2])/' ,plan), |
年 四位数,月 0-9 或者1和0-2
第二种是不分组的,在视图中安位置传参
|
re_path(r 'plan/(\d{4})\([0-9]|1[0-2]/' ,plan), |
\d\d\d\d与\d{4}含义相同,都是四位整数
7.主路由分配给分路由
如果所有是url都在主路由下配置,那么对于检查和维护修改都会带来不便,因此我们需要将主路由分配给各个app下的路由
方式:include()
使用方法:先需要导入,
|
from django.urls import path,include |
使用: eg,名为teacher的app,将主路由分给teacher.url
path(‘teacher/',include('teacher.urls')),
在teacher-app中,创建urls.py(因为新建的app没有自带url.py)
在teacher.url.py中,手动输入
|
form django.urls import path from .views import * |
这里的views是此app里的views
include可以多级使用
include的原理:当遇到include时,路径就被切断,然后在include包含的分路由中开始继续检索。
在path(‘teacher-<age>/',include('teacher.urls')),里面传参是可以的,就是分路由每个都要传参。
8、传递额外参数
当在路由中传入额外参数时,如果kwargs中key值与捕获参数不一致,按照kwargs为准。
如果在include后,传递的话,那么相当于此分路由各个url后都有此额外参数。
9、app_name的作用
-页面重定向
redirect 可以实现页面跳转
导入 from django.shortcuts import render,redirect,reverse[/code]
使用 return redirect(‘网址或者路径')
-reverse
如果给path里加入name参数,reverse(name)就等于前面路径
因此实现页面跳转,可以设变量url=reverse(name的值) 然后return redirect(url)即可实现
-app_name
那我们的name就不可以设为一样的吗?
在不同app下其实可以一样,但需要使用app_name
在url.py里urlpatterns前写
app_name = ‘appname'
使用:
|
url = reverse(appname:name) |
10、模板系统
html源码写到模板文件中
-模板路径设置
在项目中创建templates文件夹,在文件夹内创建跟app同名的文件夹
主目录下settings.py中找到 然后写入
|
templates = [ { 'backend' : 'django.template.backends.django.djangotemplates' , 'dirs' : [os.path.join(base_dir, 'templates' )], ... } |
-渲染
在templates下写的html要如何使用呢?
在需要使用的视图中引用
|
from django.template.loader import get_template from django.shortcuts import render |
使用时需要渲染,用render
|
def new(request): fg = get_template( 'student/index.html' ) 路径从templates往下的开始写 html = fg.render() return httpresponse(html) |
访问此视图,html模板即可被渲染出来
另一种更简便的方法
|
def new(request): return render(request, 'student/index.html' ) |
这次就到这里,下一篇会深入模板变量哦。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
原文链接:http://www.cnblogs.com/bdydrq/p/10423125.html
- Server.UrlEncode与HttpUtility.UrlEncode的区别
- dedecms标签调用大全(织梦cms图集{dede:field name='imgurls'}显示栏目名称)
- phpcurl调用本地函数(PHP使用CURL实现下载文件功能示例)
- js中encodeURIComponent与C#中HttpUtility.UrlEncode
- URL如何编码与解码
- python3下urllib案例(URL Rewrite Module 2.1 URL重写模块规则写法)
- 通过接口访问mysql数据库(使用mysql记录从url返回的http GET请求数据操作)
- dedecms目录说明(DedeCms获取当前页面URL地址的实现方法)
- vue实现图片上传数据库(vue.js根据图片url进行图片下载)
- python响应处理post请求(Python3模拟curl发送post请求操作示例)
- mysql url连接参数配置(浅谈Mysql连接数据库时host和user的匹配规则)
- php读取远程的txt文件(php 根据URL下载远程图片、压缩包、pdf等文件到本地)
- phplaravel快速开发平台(laravel框架实现去掉URL中index.php的方法)
- nginx怎么设置域名访问网页(Nginx服务器如何设置url链接)
- apachemodule定义(使ApacheBench支持multi-url的方法)
- curl怎么设置方法(关于Curl在Swoole协程中的解决方案详析)
- 成都轨道交通13号线一期工程最新进展(成都轨道交通13号线一期工程最新进展)
- 越南没事(越南没事情做)
- 重庆旅游攻略(重庆旅游3-4天攻略最佳线路)
- 周杰伦演唱会门票(周杰伦演唱会门票多少钱一张2023)
- 焕然一新 成都轨道集团官方网站改版上线(成都轨道集团官方网站改版上线)
- 成都轨道交通19号线二期全线电通(成都轨道交通19号线二期全线电通)
热门推荐
- 前端pc适配方案(前端兼容性问题总结PC端)
- phpstudy报错(phpStudy运行帝国备份王出错解决方法)
- python中输入背景颜色的代码(Python 给屏幕打印信息加上颜色的实现方法)
- sqlserver字段增加删减(关于SQL Server中bit类型字段增删查改的一些事)
- phpcurl调用本地函数(PHP使用CURL实现下载文件功能示例)
- docker 查看容器下进程(docker 查看容器日志命令的实现)
- docker部署高性能服务器(Docker部署SQL Server 2019 Always On集群的实现)
- css长度单位px、em、pt
- MVC中获取当前action、controller
- mysql删库操作记录(mysql常用sql与命令之从入门到删库跑路)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9