详解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')

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

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

(0)

相关推荐

  • Django web框架使用url path name详解

    quicktool/view.py文件修改视图函数index(),渲染一个home.html模板 from django.shortcuts import render def index(request): return render(request, 'home.html') quicktool(应用app)下创建一个templates文件夹(模板),在templates下创建一个home.html <!DOCTYPE html> <html> <head> <

  • Django项目主urls导入应用中views的红线问题解决

    使用PyCharm学习Django框架,从项目的主urls中导入app中的views的时候,导入的包中下面有红线报错,但是却能正常使用.要是这样也就没什么事了,但是导入之后的提示功能就丧失了,非常的不爽:网上百度了一下,竟然好多人遇到了这个问题,重要是解答的说的更是不明不白:这里记录一下详细的解决办法: 如下图,我这里就是在项目的主urls中导入一个叫blog的应用报红线,虽然运行不会报错,但是却没有了提示 解决办法: 1. 如下图,我的Django项目名称叫做 imooc_myblog_1 2

  • django 通过URL访问上传的文件方法

    Django2.0 通过URL访问上传的文件(pdf.picture等) Django是一个成熟的web框架,基于python实现,有很多的优点,很容易快速上手(详见官网:https://www.djangoproject.com/)的文档,Django2.0的文档有1872页,不得不说是非常全的,文档是可谓包罗万象. Django给我的感觉是很好很强大,至少比flask要完整的多,如果实现一个简单的需求,flask足够了,不过要安装各种依赖包,一个字繁琐!而Django则集成了非常非常全的功能

  • Django项目中包含多个应用时对url的配置方法

    一个Django工程中多数情况下会存在多个应用, 如何针对多个应用的url进行配置呢, 有以下两种方案: 1.在Django工程的urls.py中针对每个应用分别配置不同的url路径 2.在工程总体的urls.py中引入每个应用的url配置文件,不同的url路径在各自的配置文件中分别配置 我们首推第二种url的配制方法: 在Django工程的urls.py文件中,引入'blog'应用的url配置文件 在blog自己的urls.py中,引入该views 之后,在工程路径下打开命令窗口,输入pyty

  • Django URL传递参数的方法总结

    1 无参数情况 配置URL及其视图如下: (r'^hello/$', hello) def hello(request): return HttpResponse("Hello World") 访问http://127.0.0.1:8000/hello,输出结果为"Hello World" 2 传递一个参数 配置URL及其视图如下,URL中通过正则指定一个参数: (r'^plist/(.+)/$', helloParam) def helloParam(reques

  • 在Django中URL正则表达式匹配的方法

    Django框架中的URL分发采用正则表达式匹配来进行,以下是正则表达式的基本规则: 官方演示代码: from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), url(r'^articles/([0-9]{4})/$', views.year_archive), url(r'^articles/([0-9]{4})/

  • Django框架教程之正则表达式URL误区详解

    前言 利用Django开发网站,可以设计出非常优美的url规则,如果url的匹配规则(包含正则表达式)组织得比较好,view的结构就会比较清晰,比较容易维护.但这其中可能会有一些误区,下面就来给大家总结下. 问题: 我学习的视频大概是2015年录的,里面用的Django版本比较老关于正则表达式URL这一块都是用的url("url(r'^admin/', admin.site.urls),")方法.而我自己练习的时候是下载的最新版本,而正则表达式URL用的确实path("pat

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

    今天我们学习如何配置url.如何传参.如何命名.以及渲染的方式,内容大致有以下几个方面. 创建视图函数并访问 创建app django中url规则 捕获参数 路径转换器 正则表达式 额外参数 渲染方式 创建视图并访问 项目中自带的Python文件中,并没有带有视图,因此我们自己创建一个,通常,我们把视图命名views.py. 然后在views.py中,导入头文件 from django.http import HttpResponse 然后我们在views.py中,写一些Python函数,用来访

  • 详解SPA中前端路由基本原理与实现方式

    在讲前端路由之前,先说下后端路由,以及为什么出现了前端路由. 后端路由: 浏览器在地址栏中切换不同的url时,每次都向后台服务器发出请求,服务器响应请求,在后台拼接html文件传给前端显示,java web中的jsp就是如此实现的.常用的后台MVC模式的基本路由处理流程:浏览器输入一个url请求,从中找到Controller和Action的值,将请求传递给Controller处理,Controller获取Model数据对象,并且将Model传递给View,最后View呈现界面. 例如输入一个ur

  • 详解Django中views数据查询使用locals()函数进行优化

    优化场景 利用视图函数(views)查询数据之后可以通过上下文context.字典.列表等方式将数据传递给HTML模板,由template引擎接收数据并完成解析.但是通过context传递数据可能就存在在不同的视图函数中使用重复的查询语句,所以可以通过将重复查询语句设置全局变量,配合locals()函数进行数据查询与传递. 优化前 def index(request): threatname = '威胁情报展示' url = 'www.testtip.com' allthreat = Threa

  • 详解Django中异步任务之django-celery

    Celery文档参考:http://docs.jinkan.org/docs/celery/ 参考文章:https://www.jb51.net/article/158046.htm Django中异步任务---django-celery Celery简单介绍: celery使用场景: 耗时任务定时任务 请求结果不怎么重要的 耗时任务比如:发送短信验证码我们可以先发送给客户任务状态(请求成功或失败) 请求结果重要的建议使用django实现 比如:支付 首先简单介绍一下,Celery 是一个强大的

  • 详解Hbuilder中PHP环境配置

    目录 一.开启环境 二.XAMPP的安装路径 三.Hbuilder软件 四.在HBuilder上安装支持PHP的插件 五.配置HBuilder外置服务器 六.新建php文件进行测试 HBuilder是非常高效.快速的网站开发编辑器,我们用Hbuilder做网站后台php开发时,如果想要点击工具栏上的浏览器按钮进行快速预览,本文将详细介绍在前端开发神器Hbuilder中集成运行PHP的环境. 因为HBuider没有集成php运行环境,所以要依赖于一个环境,比如XAMPP.AppServ.WAMP等

  • 详解SpringBoot中自定义和配置拦截器的方法

    目录 1.SpringBoot版本 2.什么是拦截器 3.工作原理 4.拦截器的工作流程 4.1正常流程 4.2中断流程 5.应用场景 6.如何自定义一个拦截器 7.如何使其在Spring Boot中生效 8.实际使用 8.1场景模拟 8.2思路 8.3实现过程 8.4效果体验 9.总结 1.SpringBoot版本 本文基于的Spring Boot的版本是2.6.7 . 2.什么是拦截器 Spring MVC中的拦截器(Interceptor)类似于ServLet中的过滤器(Filter),它

  • 详解Django中CSRF和CORS的区别

    目录 一.CSRF:保护机制 二.CORS:跨域访问 一.CSRF:保护机制 Django预防CSRF攻击的方法是在用户提交的表单中加入一个csrftoken的隐含值,这个值和服务器中保存的csrftoken的值相同,这样做的原理如下: 1.在用户访问django的可信站点时,django反馈给用户的表单中有一个隐含字段csrftoken,这个值是在服务器端随机生成的,每一次提交表单都会生成不同的值 2.当用户提交django的表单时,服务器校验这个表单的csrftoken是否和自己保存的一致,

  • 详解IIS中URL重写工具的匹配URL-规则模式(rule patterns)

    rule patterns规则模式在IIS的URL重写模块中,是较为关键的设置.只有规则模式的URL匹配成功时,其他的规则才能起到作用.规则模式的匹配URL设置主要是匹配URL中的路径部分,一般使用正则表达式和通配符对URL路径进行匹配,下面会仔细的说明. 首先要了解规则模式是匹配URL中的哪一部分,假设当前有网站的URL地址为http://shiyousan.com/Home/Index?page=1,那么规则模式匹配的部分就是Home/Index,域名的主机部分和参数部分如果要匹配,则需要在

  • 详解django中Template语言

    Django是一个开放源代码的Web应用框架,由Python写成.采用了MTV的框架模式,即模型M,视图V和模版T.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件.并于2005年7月在BSD许可证下发布.这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的. 下面看下本文重点给大家介绍的django中Template语言,详情如下: Template本身也有自己的语言和语法,用来处理简单的数据显示 1.常用语法 判断

  • 详解Django中的FBV和CBV对比分析

    在学习Django过程中在views.py进行逻辑处理时接触到了两种视图的书写风格,FBV和CBV FBV 指 function based views,即基于函数的视图 CBV 指 class based views,即基于类的视图 基于类的视图相较于基于函数的视图可以更加便利的实现类的继承封装等.在日常使用的时候,二者的区别主要在于对于request的请求方法的处理方式 FBV 我们通过函数传入的request的method来判断客户端发起的是什么请求,并进行相应的操作,返回相应的数据. d

随机推荐