Django框架基础知识02-路由及渲染
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格式:
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-路由及渲染的更多相关文章
- Django框架基础知识01-配置环境
Django框架 Django是个怎样的东西呢? Web应用框架----Django http服务器:用来接受用户请求,并将请求转发给web应用框架进行处理. Web应用框架处理完以后再发送给htt ...
- Django框架基础知识08-表关联对象及多表查询
1.自定义主键字段的创建 AutoFiled(pirmary_key=True) # 一般不会自定义,int类型,自增长 一般不自定义主键. 2.order_by asc desc from djan ...
- Django框架基础知识13-auth系统
我们昨天登录admin时创建的用户信息是存放在哪里了呢? auth系统的数据表: 从表的名称我们就能看出, auth_user,auth_group,auth_permission分别存放了用户,用户 ...
- Django框架基础知识11-会话状态保持及表单
浏览器存储cookie的方式不太安全,那有没有更好些的来存储登入状态的方式呢??? 状态保持----cookie和session: 状态保持: 1.http协议是无状态的:每次请求都是一次新的请求,不 ...
- Django框架基础知识09-请求与响应
视图函数接受到的request到底是个什么对象呢? HttpRequest对象: 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的第一个参数是HttpRequest ...
- Django框架基础知识05-自定义模板标签与过滤器
根据一定规则,自己定义出符合需求功能的.用在任何你有需求的地方,因为内置的满足不了我们的需求,不同的东西有不同的定义规则 目前最最重要的就是HOW 一 文件路径配置: templates 存放自定义 ...
- Django框架基础知识04-模板标签与模板继承
1.常用的模板标签 -作用是什么? -常用标签 总结:语法 {% tag %} {% endtag %} {% tag 参数 参数 %} 2.模板的继承与引用 -引用 include标签 -继承 ex ...
- Django框架基础知识03-模板变量及模板过滤器
模板变量及模板过滤器. 1.模板路径的查找 -查找顺序 1.尝试,在app目录下存放模板. -两种方案 1.app项目文件夹下存放. 2.templates文件夹下分类存放. 首先查找项目settin ...
- Django框架基础知识14-类视图
MTV view视图 wsgi函数 def index(request): .... return HttpResponse() 特定的HTTP方法.get,post可以定义单独的方法 继承,多继承, ...
随机推荐
- JAVA多线程(一) Thread & Runnable
githut代码地址:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-brian-query-service/ ...
- 开发者神器!Windows上最强大的虚拟桌面工具-Dexpot
简介 : 用过Linux和Mac计算机的人都知道 , 这两个系统上都有个多桌面的功能非常使用 . 而在Windows上并没有该项功能 , 虽然目前Win10已经增加了多桌面的程序 , 但使用上仍体验不 ...
- Qt基本应用
1 使用方式 在qt designer中直接设计图形界面,然后使用pyGUI转换成py文件. 可以发现,转换的文件为一个class.并不是一个完整的程序(运行时无法出现窗口).这个类名字是Ui_Mai ...
- bzoj2301 [HAOI2011]Problem b【莫比乌斯反演 分块】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2301 很好的一道题.首先把每个询问转化为4个子询问,最后的结果就是这四个子询问的记过加加减减 ...
- 洛谷 P2841 A*B Problem
https://www.luogu.org/problemnew/show/P2841 根本不会啊... 大概就是:如果两个数模a的结果相同,那么它们前面同时加上一个0或1后模a的结果仍然相同,因此可 ...
- Ionic之ui-sref引入图片,图片部分挡住解决方案
ionic图片设置大小跟图片像素相同,但是使用ui-sref="parkInfo"上半部分图片会挡住,增加height的高度,就可以显示原本图片 页面: <ion-conte ...
- P2006 赵神牛的游戏
题目描述 在DNF 中,赵神牛有一个缔造者,他一共有k点法力值,一共有m个技能,每个技能耗费的法力值为a[i],可以造成的伤害为b[i],而boss 的体力值为n,请你求出它放哪个技能,才可以打死bo ...
- dubbo系列--重要概念介绍
dubbo架构图 节点角色说明 整体设计 proxyFactory:就是为了获取一个接口的代理类,例如获取一个远程接口的代理.它有2个方法,代表2个作用 getInvoker:针对server端,将服 ...
- 【转】深入理解Android中的SharedPreferences
SharedPreferences作为Android中数据存储方式的一种,我们经常会用到,它适合用来保存那些少量的数据,特别是键值对数据,比如配置信息,登录信息等.不过要想做到正确使用SharedPr ...
- 介绍三款大前端UI框架
一.蚂蚁金服团队推出的基于React antd (全名:ant.design) 友情跳链:https://ant.design/index-cn:使用antd模板:https://pro.ant.de ...