详解django中url路由配置及渲染方式


Posted in Python onFebruary 25, 2019

今天我们学习如何配置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

详解django中url路由配置及渲染方式

如果没有连接本地,则需要重新连接

详解django中url路由配置及渲染方式

方式二:

tool ----> run manage.py projectname

详解django中url路由配置及渲染方式

详解django中url路由配置及渲染方式

startapp appname

此方法也需要下载下来

详解django中url路由配置及渲染方式

详解django中url路由配置及渲染方式

下载完成后,创建的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为准。

详解django中url路由配置及渲染方式

详解django中url路由配置及渲染方式

详解django中url路由配置及渲染方式

如果在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')

这次就到这里,下一篇会深入模板变量哦。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
用python登录Dr.com思路以及代码分享
Jun 25 Python
Python简单实现子网掩码转换的方法
Apr 13 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
Dec 12 Python
python3 shelve模块的详解
Jul 08 Python
python中找出numpy array数组的最值及其索引方法
Apr 17 Python
python制作填词游戏步骤详解
May 05 Python
Python缓存技术实现过程详解
Sep 25 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
Feb 29 Python
浅谈python3打包与拆包在函数的应用详解
May 02 Python
Python转换字典成为对象,可以用&quot;.&quot;方式访问对象属性实例
May 11 Python
Selenium python时间控件输入问题解决方案
Jul 22 Python
容易被忽略的Python内置类型
Sep 03 Python
利用python脚本如何简化jar操作命令
Feb 24 #Python
Python中如何使用if语句处理列表实例代码
Feb 24 #Python
python实现两张图片的像素融合
Feb 23 #Python
Python判断有效的数独算法示例
Feb 23 #Python
Python实现的旋转数组功能算法示例
Feb 23 #Python
Python实现求两个数组交集的方法示例
Feb 23 #Python
Python神奇的内置函数locals的实例讲解
Feb 22 #Python
You might like
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
php递归删除指定文件夹的方法小结
2015/04/20 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
PHP项目多语言配置平台实现过程解析
2020/05/18 PHP
JavaScript 布尔操作符解析  &amp;&amp; || !
2012/08/10 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
jQuery扁平化风格下拉框美化插件FancySelect使用指南
2015/02/10 Javascript
JavaScript面向对象的实现方法小结
2015/04/14 Javascript
Node.js模块封装及使用方法
2016/03/06 Javascript
jQuery实现的倒计时效果实例小结
2016/04/16 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
vue.js计算属性computed用法实例分析
2018/07/06 Javascript
vue.js单文件组件中非父子组件的传值实例
2018/09/13 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
2018/09/27 Javascript
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
微信小程序左滑删除实现代码实例
2019/09/16 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
在Python中实现替换字符串中的子串的示例
2018/10/31 Python
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
基于python监控程序是否关闭
2020/01/14 Python
浅谈python之自动化运维(Paramiko)
2020/01/31 Python
深入了解canvas在移动端绘制模糊的问题解决
2019/04/30 HTML / CSS
玩具反斗城美国官网:Toys"R"Us
2016/09/17 全球购物
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
extern在函数声明中是什么意思
2014/01/19 面试题
为什么说Ruby是一种真正的面向对象程序设计语言
2012/10/30 面试题
集团公司党的群众路线教育实践活动工作总结
2014/03/03 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
办公室文员工作自我鉴定
2014/09/19 职场文书
毕业生就业推荐表导师评语
2014/12/31 职场文书
客服专员岗位职责范本
2015/04/07 职场文书
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
2021/05/25 MySQL
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python