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可以定义单独的方法 继承,多继承, ...
随机推荐
- 组合数学1.4&3.10 By cellur925
本文引用于清华大学出版社卢开澄.卢华明<组合数学第五版>. 今天我们稍微讨论下圆排列以及$n$对夫妻的问题. 1.4圆周排列 这个问题是:从$n$个人中取$r$个在圆周上,我们用$Q(n, ...
- linux之用户态和内核态
一. Unix/Linux的体系架构 如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核).内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程 ...
- Win10各个版本免费激活密钥
专业版:W269N-WFGWX-YVC9B-4J6C9-T83GX 企业版:NPPR9-FWDCX-D2C8J-H872K-2YT43 家庭版:TX9XD-98N7V-6WMQ6-BX7FG-H8 ...
- 【Tsinsen】A1280. 最长双回文串
Bryce1010模板 http://www.tsinsen.com/A1280### 题目分析:记录一个点向后和向前的最长回文串,然后就是max(Llen[i]+Rlen[i+1])了. #incl ...
- MyEclipse常用快捷键及快捷键大全
MyEclipse常用快捷键:alt+/ 代码提示ctrl+shift+F 代码排版ctrl + / 注释当前行 ctrl+D 删除当前行 Alt+C 拷贝当 ...
- python programming
1. super 2. *args, **kwargs 3. class object 4. type 5. isinstance 6. list[:] = another_list
- (025)[系统故障]XP下禁止将串口设备识别成鼠标(转)
很多人都遇到过这种问题:Windows XP启动时将一台连续发送数据的串口设备识别成串口鼠标,自动安装了串口鼠标驱动,而设备因此无法正常工作,而光标则无规律地到处跑.对此问题,Internet上的方法 ...
- 生产环境中使用脚本实现tomcat start|status|stop|restart
一.在实际生产环境中tomcat启动是在bin目录下采用自带脚本startup.sh启动:使用shutdown.sh关闭.如下图: 再如果对于新手来讲在不知道路径情况下重启是一件头痛的事情(注意没有r ...
- SOLR-disMax查询参数
dismax参数用于处理用户输入的简单短语,并根据字段的重要度进行加权查询,查询范围为多个字段区域.dismax会忽略搜索字符串中的 "AND","OR", & ...
- C#: static关键字的作用(转)
C#: static关键字的作用 static意思是静态,可以修饰类.字段.属性.方法 标记为static的就不用创建实例对象调用了,可以通过类名直接点出来 static三种用法: 1.用于变量前 ...