1.URL(Uniform Resoure Locator)统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。 网址 全球统一资源定位符http://ww.aspxfans.com:8000/news/index/asp?ID=5&page=1#name,{协议}{域名}{路径}{参数#锚点}

2.django的路由系统,当一个请求来到时 1.首先到项目目录(manage.py的同层的一个项目文件夹)下的urls.py (根URLconf模块)中,查找路由规则 2.根URLconf模块,里面定义了 urlpatterns 变量 3.urlpatterns 是一个(django.urls.path,django.urls.re_path 对象)列表 4.按顺序运行每个url模式,在第一个匹配的模式停止 5.一旦匹配,django导入并调用给定的视图 6.如果中间出错,或者没有匹配到,返回404

django路由系统

-path(route, view, kwargs=None, name=None)

  • route 是一个字符串的url规则

  • view 是个视图

  • kwargs 额外参数,传递给view,必须是一个字典

  • name url的命名

在url中捕获参数

在url规则中使用<变量名>可以捕获url中的值 传递给视图 捕获的值是 字符串,

案例:int:pk.

  • 路径转换器 案例:int:pk

常用的装换器:

  • str 匹配除了‘/'路径分隔符之外的所有字符串
  • int 匹配任意整数
  • slug 匹配任意ASCII字符 加上连字符和下划线
  • uuid 格式化id
  • path 匹配任意非空字符

使用正则表达式 re_path(route, view, kwargs=None, name=None)

python 中 正则表达式的分组命名 (?<name>pattern)

例:

urlpatterns = [

    path('admin/', admin.site.urls),
   path('index/', views.index),
   path('detail/<int:pk>/', views.detail),
   re_path(r'students/(?P<year>\d{4})/(?P<month>[0-9]|1[0-2])/', views.students),#分组按照关键字参数,不分组按照位置参数.
]

django 搜索 url 搜索的是什么? 只搜索路径部分,跟参数,以及请求方法(get,post),无关.同一个url 可以匹配 get, post

包含其他URLconfs include,

urlpatterns = [
   path('admin/', admin.site.urls),
   path('teacher/', include('teacher.urls'))
]
​include可以有多级,碰到include就把前面的截掉,可以接收参数.向下级每一层传参,谨慎使用.

传递额外参数

path,re_path 方法中,传递一个kwargs 的字典参数

当kwargs 中的key 与 url捕获中的key 不一致的时候,以kwargs为准

在项目urls模块路由的include后面加上kwargs,相当于在include的urls模块中给每一个传参.

url 命名

页面重定向 ,跳转页面登录之后,某个操作之后

from django.shortcuts import redirect,reverse   #动态反制解析出路由
urlpatterns=[
   path('home/', views.index,name=
        'index'),
]

app_name

定义在 app文件夹下的urlconf模块中 app_name = app名称

  • 例:

  • 在teacher.urls中定义一个 app_name = 'teacher'

  • 在student.urls中定义一个app_name = 'student'

  • 然后在view中定义

  • def login(request):
       url = reverse('teacher:index',kwargs={'pk':12}) #可以这样传参
       return redirect(url)

3.模板系统

html 源码写到模板文件中

  • 模板路径设置 settings.py里面设置static目录

  • def index(request):
       tp = get_template('teacher/index.html')
       html = tp.render()
       return HttpResponse(html)
  • 渲染

  tp = get_template('teacher/index.html')

  html = tp.render()

  return HttpResponse(html)

快捷方式 推荐使用

  return render(request, 'teacher/index.html')

URL格式:

http://127.0.0.1:8000/hello/

URL各部分的解释:

schema://host[:port#]/path/.../?query-string

  schema:指定使用的协议(例如:http, https, ftp)

  host:Http服务器的IP地址或者域名

  port:端口号,http默认是80端口

  path:访问资源的路径

  query-string:发送给http服务器的数据

  anchor:锚点

  urls.py的作用

URL配置(URLconf)就像是Django所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表。以这样的方式告诉Django,对于那个URL调用那段代码。url的加载就是从配置文件中开始

url例子:

1.在项目目录下urls.py文件.

2.在项目目录创建了一个views.py文件.

path 基本规则:

使用尖括号(<>)从url中捕获值。

包含一个转化器类型(converter type)

没有转化器,将匹配任何字符串,当然也包括了 / 字符。

path('test/<xx>/',views.test)

当前面的url匹配成功后

就会调用后面的视图函数

默认支持的转换器:

str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式

int,匹配正整数,包含0。

slug,匹配字母、数字以及横杠、下划线组成的字符串。

uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。

path,匹配任何非空字符串,包含了路径分隔符

转换器的使用:

1.设置url:

path('test/int:xx/',views.test3)

2.在视图中将获取到的参数

和参数的类型打印出来:

def test3(request,xx):

  print(xx,type(xx))

  return HttpResponse('hello %s'%xx)

re_path正则匹配

  re_path('^hello/$',views.test5),

  re_path('^hello/(?P<yy>[0-9]+)/',views.test6),

def test5(request):

  return HttpResponse('这是用的re_path设置的')

def test6(request,yy):

  print(yy,type(yy))

return HttpResponse('hello %s'%yy)

include的作用:

一个project有一个总的urls.py

各个app也可以自己建立自己的urls.py

用include()函数在project的urls.py文件进行注册

一个url对应一个视图函数,但我们的视图越来越多时,url也就越来越多

include例子:

项目目录下的主urls.py

from django.contrib import admin

from django.urls import path,include

from . import views

urlpatterns = [

  path('admin/', admin.site.urls),

  path('book/',include('book.urls')),

]

APP books里面的urls.py

from django.urls import path

from . import views

urlpatterns = [

  path('index/',views.index),

]

APP books里面的views.py

from django.shortcuts import render

from django.http import HttpResponse

Create your views here.

def index(request):

  return HttpResponse('这个book的首页!!')

kwargs的作用

传递一个Python 字典作为额外的参数传递给视图函数。

主urls.py文件

from django.contrib import admin

from django.urls import path,include

urlpatterns = [

  path('admin/', admin.site.urls),

  path('book/',include('book.urls'),{'switch':'true'}),

]

Kwargs为字典类型

可以传递额外的参数到views中

使用include的时候

需要统一给下面的url一些参数的时候

显得尤其有用

视图函数中可以通过关键字参数获取到

APP books里面的views.py

from django.http import HttpResponse

import datetime

def index(request,\kwargs):

  if kwargs.get('switch') == 'true':

    print(datetime.datetime.now())

  return HttpResponse('这个book的首页!!')

name的作用

给一个匹配的url地址取名字

一般用于模板,也可以使用reverse进行页面重定向

页面重定向的例子

APP books里面的urls.py

给url取个名字

APP books里面的views.py

redirect是重定向,reverse是将url的name解析成url本身的函数

name的作用:

name参数可以给这个url取一个合适的名字。通过给url取名字,以后在view或者模板中使用这个URL,就只需要通过这个名字就可以了。这样做的原因是防止url的规则更改,会导致其他地方用了这个url的地方都需要更改,但是如果取名字了,就不要做任何改动了。

Django怎样去调用漂亮的HTML前端页面呢?

模板放在哪?

1.在主目录下创建一个templates目录用来存放所有的html的模板文件.

2.templates目录里面在新建各个以app名字命名的目录来存放各个app中模板文件.

setting.py中的模板路径配置

将我们的设置好的存放html模板的templates目录路径添加到DIRS中

渲染模板

1.直接将html字符串硬编码HttpResponse中

2.django.template.loader 定义了函数以加载模板

3.使用render进行渲染。

render方法是django封装好用来渲染模板的方法

很方便,很好用!!!

Django框架基础知识02-路由及渲染的更多相关文章

  1. Django框架基础知识01-配置环境

    Django框架 Django是个怎样的东西呢? Web应用框架----Django  http服务器:用来接受用户请求,并将请求转发给web应用框架进行处理. Web应用框架处理完以后再发送给htt ...

  2. Django框架基础知识08-表关联对象及多表查询

    1.自定义主键字段的创建 AutoFiled(pirmary_key=True) # 一般不会自定义,int类型,自增长 一般不自定义主键. 2.order_by asc desc from djan ...

  3. Django框架基础知识13-auth系统

    我们昨天登录admin时创建的用户信息是存放在哪里了呢? auth系统的数据表: 从表的名称我们就能看出, auth_user,auth_group,auth_permission分别存放了用户,用户 ...

  4. Django框架基础知识11-会话状态保持及表单

    浏览器存储cookie的方式不太安全,那有没有更好些的来存储登入状态的方式呢??? 状态保持----cookie和session: 状态保持: 1.http协议是无状态的:每次请求都是一次新的请求,不 ...

  5. Django框架基础知识09-请求与响应

    视图函数接受到的request到底是个什么对象呢? HttpRequest对象: 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的第一个参数是HttpRequest ...

  6. Django框架基础知识05-自定义模板标签与过滤器

    根据一定规则,自己定义出符合需求功能的.用在任何你有需求的地方,因为内置的满足不了我们的需求,不同的东西有不同的定义规则 目前最最重要的就是HOW 一 文件路径配置: templates 存放自定义 ...

  7. Django框架基础知识04-模板标签与模板继承

    1.常用的模板标签 -作用是什么? -常用标签 总结:语法 {% tag %} {% endtag %} {% tag 参数 参数 %} 2.模板的继承与引用 -引用 include标签 -继承 ex ...

  8. Django框架基础知识03-模板变量及模板过滤器

    模板变量及模板过滤器. 1.模板路径的查找 -查找顺序 1.尝试,在app目录下存放模板. -两种方案 1.app项目文件夹下存放. 2.templates文件夹下分类存放. 首先查找项目settin ...

  9. Django框架基础知识14-类视图

    MTV view视图 wsgi函数 def index(request): .... return HttpResponse() 特定的HTTP方法.get,post可以定义单独的方法 继承,多继承, ...

随机推荐

  1. OpenCV认识之发展历史

    OpenCV认识之发展历史刚接触OpenCV,据说是专门用于机器视觉,机器人图形图像处理等,但对OpenCV的历史还不是特别了解,今天上网查好多资料,记录在此,OpenCV的全称是:Open Sour ...

  2. 51Nod 1021 石子归并(动态规划)

    #include <iostream> #include <algorithm> #include <string> #include <iostream&g ...

  3. mysql架构解析

    架构 mysql是cs架构,在服务端可以启动该mysqld服务,mysqld进程默认监听在tcp:3306.在客户端使用命令行工具mysql或者图形化工具navicat for mysql进行远程连接 ...

  4. PHP函数技巧篇

    可变参数 Php提供3个函数用于检索在函数中所传递的参数. $array = func_get_args(); //返回一个提供给函数的所有参数的数组 $count = func_num_args() ...

  5. 线段树(单点更新) HDOJ 2795 Billboard

    题目传送门 /* 主要利用线段树求区间最值,sum[]代表位置可用空间 每次找到最大值的位置 功能:查询最靠前能容纳广告的位置 */ #include <cstdio> #include ...

  6. 转 多个版本的数据库在同一服务器上ORA-12557

    http://blog.chinaunix.net/uid-42518-id-3153473.html 问题描述:当同一台机子上安装了多个版本的数据库,可能在连接库或ASM时会报以下错误.ORA-12 ...

  7. C/C++程序计时函数gettimeofday的使用

    linux 环境下 用 clock_t发现不准. 换用 //头文件 #include <sys/time.h> //使用timeval start, end;   gettimeofday ...

  8. Backbone学习记录(2)

    创建一个集合 1)new Backbone.Collection()方式 var user=new Backbone.Model({'name':'susan'}); var list=new Bac ...

  9. archsummit_bj2014

    http://bj2014.archsummit.com/schedule.html 大会日程 时间 2014年12月19日 会议室 二号会议厅 7:45 入场注册 8:45 开场致辞 9:30 论高 ...

  10. DataTable数据导入DataBase

    EXcel---->DataTable--->DataBase /// <summary> /// Excel数据-->DataTable导入DataBase /// & ...