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

    使用     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')

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

django中url路由配置及渲染方式的更多相关文章

  1. Django 02 url路由配置及渲染方式

    Django 02 url路由配置及渲染方式 一.URL #URL #(Uniform Resoure Locator) 统一资源定位符:对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是 ...

  2. url路由配置以及渲染方式

    路由分配及模板渲染 路由系统 urlpatterns = [ path('admin/', admin.site.urls), path('teacher/',include('teacher.url ...

  3. 3/19 Django框架 url路由配置及模板渲染

    3/19 Django框架 url路由配置及模板渲染 1.路由分配 URL(Uniform Resoure Locato):统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示, ...

  4. Django中的路由配置简介

    Django中的路由配置简介 路由配置(URLconf)就是Django所支撑网站的目录.其实,我们利用路由交换中的"寻址"的概念去理解Django的路由控制会简单很多,它的本质就 ...

  5. Django 学习第二天——URL路由及模板渲染方式

    URL 的概念及格式: URL的引入:客户端:知道了url 就可以去进行访问: 服务端:设置好了url,别人才能访问到我 URL :网址(全球统一资源定位符):由 协议,域名(ip port) ,路径 ...

  6. Flask中的路由配置

    在Flask中也同样有django中的路由配置只不过没有djngo那么严格主要的参数有一下六个记住常用的就可以了 1.endpoint   反向生成url地址标志,默认视图函数名 2.methods ...

  7. Django学习手册 - 正则URL路由配置/路由分发

    ############################################### 总结: 一.url路由配置: 方式一:(通过url链接get获取) 方式二:(url路由匹配方式获取-拓 ...

  8. django 中的路由系统(url)

    路由系统 根据Django约定,一个WSGI应用里最核心的部件有两个:路由表和视图.Django框架 的核心功能就是路由:根据HTTP请求中的URL,查找路由表,将HTTP请求分发到 不同的视图去处理 ...

  9. Django之url路由

    Django之url路由 url路由介绍 url路由是关联url及其视图函数关系的过程. 作用就是使views里面处理数据的函数与请求的url建立映射关系 url路由配置 Django的url路由配置 ...

随机推荐

  1. php 将图片转成base64

    /** * 获取图片的Base64编码(不支持url) * @date 2017-02-20 19:41:22 * * @param $img_file 传入本地图片地址 * * @return st ...

  2. (BUG记录)记一次与其他系统交互协作时造成的锁表问题

    最近两日做公司电信某计费项目时,接收一个银行对账的任务,在完成对账后.电信和银行两方金额一致时需要进行充值.冲正操作保持金额一致.冲正服务是JAVA统一调用Tuxedo服务,这个服务已经是一个稳定可用 ...

  3. Swift与C++混编 OpenCV初体验 图片打码~

    OpenCV初体验,给图片打码 提到OpenCV,相信大多数人都听说过,应用领域非常广泛,使用C++开发,天生具有跨平台的优势,我们学习一次,就可以在各个平台使用,这个还是很具有诱惑力的.本文主要记录 ...

  4. javaScript Event Loop + NodeJs问题解析

    http://www.ruanyifeng.com/blog/2014/10/event-loop.html https://github.com/ElemeFE/node-interview/tre ...

  5. JavaScript递归函数解“汉诺塔”

    “汉诺塔”是一个著名的益智游戏.塔上有3根柱子和一套直径各不相同的空心圆盘.开始时柱子上的所有圆盘都按照从小到大的顺序堆叠.目标是通过每次移动一个圆盘到另一根柱子,最终把一堆圆盘移动到目标柱子上,过程 ...

  6. Hadoop 集群安装(主节点安装)

    1.下载安装包及测试文档 切换目录到/tmp view plain copy cd /tmp 下载Hadoop安装包 view plain copy wget http://192.168.1.100 ...

  7. MemCache详细解读

    MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...

  8. [Bash]LeetCode193. 有效电话号码 | Valid Phone Numbers

    Given a text file file.txt that contains list of phone numbers (one per line), write a one liner bas ...

  9. [Swift]LeetCode410. 分割数组的最大值 | Split Array Largest Sum

    Given an array which consists of non-negative integers and an integer m, you can split the array int ...

  10. [Swift]LeetCode823. 带因子的二叉树 | Binary Trees With Factors

    Given an array of unique integers, each integer is strictly greater than 1. We make a binary tree us ...