day052 django第三天 url和视图
一.基本格式
from django.conf.urls import url
from . import views
#循环urlpatterns,找到对应的函数执行,匹配上一个路径就找到对应的函数执行,
就不再往下循环了,并给函数传一个参数request,和wsgiref的environ类似
,就是请求信息的所有内容
urlpatterns = [
url(正则表达式, views视图函数,参数,别名),
]
参数说明 1.正则表达式:一个正则表达式字符串 2.views视图函数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串 3.参数:可选的要传递给视图函数的默认参数(字典形式) 4.别名:一个可选的name参数
注意事项 1.urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续。 2.若要从URL中捕获一个值,只需要在它周围放置一对圆括号(分组匹配)。 3.不需要添加一个前导的反斜杠(也就是写在正则最前面的那个/), 因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。 4.每个正则表达式前面的'r' 是可选的但是建议加上。 5.^articles& 以什么结尾,以什么开头,严格限制路径
二.分组命名匹配
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
#注意正则匹配出来的内容是字符串,即便是你在url里面写的是2003数字,匹配出来之后也是字符串
url(r'^articles/(\d{4})/$', views.year_archive),#year_archive(request,2003),
小括号为分组,有分组,那么这个分组得到的用户输入的内容,就会作为对应函数的位置参数传进去,
别忘了形参要写两个了,明白了吗?
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
#某年的,(?P<year>[0-9]{4})这是命名参数(正则命名匹配还记得吗?),
那么函数year_archive(request,year),形参名称必须是year这个名字。
而且注意如果你这个正则后面没有写$符号,即便是输入了月份路径,也会被它拦截下拉,因为它的正则也能匹配上
url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
#某年某月的
url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),
#某年某月某日的
]
# urls.py中
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^blog/$', views.page),
url(r'^blog/page(?P<num>[0-9]+)/$', views.page),
]
# views.py中,可以为num指定默认值
"):
pass
复制代码
三.分发 ( include)
1.分发过程
①主文件中的 urls.py

② app文件中的 urls.py

③ settings.py文件中添加 app02

四.参数
1. 从 .html 传到 view.py
在 .html 中 1 2 3 作为参数
<ul>
<li><a href="{% url 'articles' 1 %}">第1页</a></li>
<li><a href="{% url 'articles' 2 %}">第2页</a></li>
<li><a href="{% url 'articles' 3 %}">第3页</a></li>
</ul>s
在 urls.py 文件中 参数要用小括号 里面是正则表达式 通过函数传送
url(r'^articles/(\d{1})/',views.articles,name='articles'),
在 view.py 文件中 通过函数传过来
def articles(request,page_number):
s = '这是第' + page_number +'页的所有文章'
return HttpResponse(s)
2. 从view.py 传到 .html
①. 在view.py 文件中

②. 在 .html 文件中

五.别名 ( URL的反向解析)(软编码)
解决解决网址更换带来的不便
在urls.py文件中
url(r'^index', views.home, name='home'), # 给我的url匹配模式起名(别名)为 home,别名不需要改,路径你就可以随便改了,
别的地方使用这个路径,就用别名来搞
在 .html 文件中(不管文职如何改变,在.html中都不需要改变)
<body>
<a href="{% url 'home' %}">asdf</a>
<form action="{% url home' %}">
</form>
<a href="{% url 'home' %}">asdf</a>
</body>
在 view.py 中
先引入
from django.urls import reverse
def login(request):
if request.method == 'POST':
url = reverse('home')
print(url)
return redirect(url) #重定向
return render(request,'login.html')
六.重定向( redirect 响应)
给浏览器一个 30x 的状态码
重定向原因:
(1)网站调整(如改变网页目录结构);
(2)网页被移到一个新地址;
(3)网页扩展名改变(如应用需要把.php改成.Html或.shtml)。
这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户 得到一个404页面错误信息,访问流量白白丧失;再者某些注册了多个域名的
网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点等。
示例
view文件中
from django.shortcuts import render,HttpResponse,redirect
def index(request):
return redirect('/base/')
def base(request):
dic = {'name': 'chao'}
return render(request,'base.html',dic)
urls.py文件中
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
# url(r'^admin/', admin.site.urls),
url(r'^$', views.index),
url(r'^base/', views.base),
]
301和302的区别。 301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到 一个新的URL地址,这个地址可以从响应的Location首部中获取 (用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)——这是它们的共同点。 他们的不同在于。 301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了), 搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址; 302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B, 搜索引擎会抓取新的内容而保存旧的网址。 SEO302好于301
七.请求 与 响应 的常用方法
from django.shortcuts import render,HttpResponse,redirect
# Create your views here.
def index(request):
#请求方式
print(request.method) #获取请求方式
print(request.GET) #获取get请求的所有数据 字典
print(request.POST) #获取post请求的所有数据 字典
# print(request.GET.get()) #字典取值
# print(request.POST.get()) #字典取值
print(request.path) # /index/ #路径
print(request.get_full_path()) # /index/?a=1&b=2 路径带参数
# print(request.META) # 请求头所有信息的一个大字典
print(request.META['HTTP_USER_AGENT']) # Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36
#响应方式
#① HttpResponse(字符串)
# return HttpResponse('ok')
# ②render 返回页面
# ③redirect 重定向
return redirect('/base/')
八.静态文件配置方式
1

2

day052 django第三天 url和视图的更多相关文章
- Django基础三之路由、视图、模板
Django基础三之路由.视图.模板 目录 Django基础三之路由.视图.模板 1. Django 请求和返回周期 1.1 路由层之路由匹配 1.2 有名分组 1.3 无名分组 2. 反射解析 3. ...
- 【django基础补充之URL,视图,模版】
一.url路由配置 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个URL调用这段代 ...
- Django - 环境搭建、url、视图、模板、标签、过滤器
(一).简介 简介就不多说了,网上的内容一大堆.总结来说,django是走大而全的路线,写项目超级快,几乎什么都为你考虑到了,你就乖乖照着它的格式来写就行了. 这里来一些基本认知: web应用框架(w ...
- <Django> MVT三大块之view(视图)
1.视图简介 作用:接受web请求,返回web响应 本质:一个函数,定义在views.py文件中(定义在其他地方也行,约定俗成) 流程:(如果匹配不到,报一个404错误)-----结果返回http r ...
- Django学习笔记之URL与视图
视图 视图一般都写在app的views.py中.并且视图的第一个参数永远都是request(一个HttpRequest)对象.这个对象存储了这个http请求的所有信息,其中包括携带的参数以及一些头部信 ...
- 第三章 URL与视图
配置文件两种方式详解 先讲两种直接传参: 直接简单传参 app =Flask(__name__) app.config['DEBUG']=True app.config.update( DEBUG=t ...
- Django学习笔记之URL与视图cookie和session
cookie和session cookie:在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是为了 ...
- Python+Django+SAE系列教程9-----Django的视图和URL
第三.四.五章介绍的就是Django中MVC的视图.模板.模型了. 首先来看视图(view),在用Django生成的站点目录中,创建一个view.py文件,这个文件開始是空的.然后我们输入下面内容: ...
- 一.rest-framework之版本控制 二、Django缓存 三、跨域问题 四、drf分页器 五、响应器 六、url控制器
一.rest-framework之版本控制 1.作用 用于版本的控制 2.内置的版本控制 from rest_framework.versioning import QueryParameterVer ...
随机推荐
- 廖雪峰 JavaScript 学习笔记(判断、循环)
条件判断 固定格式:if () { ... } else { ... } ,else可选 1.多行条件判断,通常把else if连写在一起,来增加可读性 例子: var age = 3; if (a ...
- Java GC机制
GC机制的基本算法是:分代收集,这个不用赘述.下面阐述每个分代的收集方法. 年轻代: 事实上,在上一节,已经介绍了新生代的主要垃圾回收方法,在新生代中,使用“停止-复制”算法进行清理,将新生代内存分为 ...
- jquery将表单序列化
在工作中经常要将表单数据通过ajax提交,所以需要将表单序列化为json对象. 已经有大神提供了,以前一直百度,现在决定抄过来收藏一下,方便以后自己用,尊重原创,文章转载自:http://www.cn ...
- js没事干应该瞧瞧的一些博客
https://zhidao.baidu.com/question/1736568808722198187.html http://www.cnblogs.com/webpush/p/4963002. ...
- windows2012安装
windows server 2012 r2 安装无法找到install.wim 错误代码0x80070026,以及制作U启动盘决解ISO文件超过5G大小限制的解决方案关于在服务器上安装windows ...
- guxh的python笔记八:特殊方法
1,类的特殊方法 新建一个类,本章内容中的特殊方法如果不创建类或新增方法,默认使用的就是下面的类: class Foo: """this is Foo"&q ...
- 联盟链初识以及Fabric环境搭建流程
这篇文章首先简单介绍了联盟链是什么,再详细的介绍了Fabric环境搭建的整个流程. 区块链分类: 以参与方式分类,区块链可以分为:公有链.联盟链和私有链. 定义: 我们知道区块链就是一个分布式的,去中 ...
- HTTP 协议(一)之基本概念入门
一.网络基础 TCP/IP 计算机与网络设备要相互通信,双方就必须基于相同的方法. TCP/IP 协议族按层次分别分为以下 4层:应用层.传输层.网络层和数据链路层. 应用层: 决定了向用户提供应用服 ...
- laravel 实现增 与查
//调用模型层 <?phpnamespace App;use Illuminate\Support\Facades\DB;use Illuminate\Database\Eloquent\Mod ...
- Runtime-消息发送和消息转发
消息发送 消息发送举例:下面这个OC代码 [person read:book]; 会被编译成: objc_msgSend(person, @selector(read:), book); objc_m ...