详解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局部赋值的规则
Mar 07 Python
Python单例模式实例分析
Jan 14 Python
使用Python标准库中的wave模块绘制乐谱的简单教程
Mar 30 Python
python清除指定目录内所有文件中script的方法
Jun 30 Python
深入理解Python中字典的键的使用
Aug 19 Python
Python中的迭代器与生成器高级用法解析
Jun 28 Python
Python多维/嵌套字典数据无限遍历的实现
Nov 04 Python
浅析Python pandas模块输出每行中间省略号问题
Jul 03 Python
python七夕浪漫表白源码
Apr 05 Python
Python实现生成密码字典的方法示例
Sep 02 Python
Python数据可视化图实现过程详解
Jun 12 Python
pytest实现多进程与多线程运行超好用的插件
Jul 15 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
使用symfony命令创建项目的方法
2016/03/17 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
PHP基于curl模拟post提交json数据示例
2018/06/22 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
2011/08/28 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
jquery实现列表上下移动功能
2016/02/25 Javascript
jquery中live()方法和bind()方法区别分析
2016/06/23 Javascript
AngularJs  Using $location详解及示例代码
2016/09/02 Javascript
JS实现动态修改table及合并单元格的方法示例
2017/02/20 Javascript
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
Node.js中读取TXT文件内容fs.readFile()用法
2018/10/10 Javascript
浅谈js中的bind
2019/03/18 Javascript
深入了解响应式React Native Echarts组件
2019/05/29 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
[01:09:40]Newbee vs Pain 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python Web框架Flask中使用新浪SAE云存储实例
2015/02/08 Python
详解重置Django migration的常见方式
2019/02/15 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
python实现人工智能Ai抠图功能
2019/09/05 Python
python 字典有序并写入json文件过程解析
2019/09/30 Python
Python values()与itervalues()的用法详解
2019/11/27 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
什么是Python中的匿名函数
2020/06/02 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
python中的列表和元组区别分析
2020/12/30 Python
基于Jquery和Css3代码制作可以缩放的搜索框
2015/11/19 HTML / CSS
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
银行办理业务介绍信
2014/01/18 职场文书
公务员综合考察材料
2014/02/01 职场文书
交通安全横幅标语
2014/10/07 职场文书
2014年党风廉政工作总结
2014/12/03 职场文书
2014年绩效考核工作总结
2014/12/11 职场文书
计划生育工作总结2015
2015/04/03 职场文书
java executor包参数处理功能 
2022/02/15 Java/Android