一、视图函数
一个视图函数,简称视图,是一个简单的python函数,接收WEB请求并返回web响应。响应可以是一张网页的html内容,一个重定向,一个404错误等。在函数中必须写一个request的参数,然后必须要有返回值,中间的逻辑随便,整个函数写在哪里也无所谓,只要Python目录下就行,但我们默认规定,视图函数一般都写在每个应用下面views.py文件里。
下面是一个返回当前时间的视图函数
from Django.shortcuts import render, HttpResponse, HttpResponseRedirect, redirect
import datetime
def current_datetime(request):
now = datetime.datetime.now()
html = "<html><body>It is now %s.</body></html>" % now
return HttpResponse(html)
红色部分必须要有的
request为请求对象,包含了所有的请求信息
HTTPResponse,render,redirect 都是返回的方式而已
函数名是可以随便取的,只要和url相对应就行
二、request请求对象
request是DjanGo把请求报文中的请求行、请求头,请求体封装成一个对象,只要用request.属性就可以得到相应的请求值
三、响应对象
响应对象就相当于就web请求给的web回应,响应对象主要有三种形式:HTTPResponse(),render(),redirect()
1,HTTPResponse()
from django.shortcuts import render,HttpResponse,redirect
def func(request):
if request.method=='GET':
return HttpResponse('是get请求方式')
return HttpResponse('不是get请求方式')
HTTPResponse方式只需给字符串就行
2,render()
from django.shortcuts import render,HttpResponse,redirect
def login(request):
if request.method=='GET':
return render(request,'login.html')
return HttpResponse('Error')
后面跟两个参数,第一个必须写request,第二个写上一个模板,render()会做两个事,首先帮你找到相应的模板,读取内容,其次是解析模板中的模板语句,最后把解析后的字符串交给HTTPResponse发给浏览器
3,redirect()重定向
from django.shortcuts import render,HttpResponse,redirect
def login(request):
if request.method=='GET':
return render(request,'login.html')
else:
if request.POST.get('user')=='alex' and request.POST.get('pwd')=='123':
return redirect('/shouye/')
else:
return HttpResponse('Error')
上面代码的功能是用户进行登录验证,成功后进入首页,但是我们用的redirect()并不会在登录成功后直接发一个首页的HTML文件给浏览器,而是给浏览器一个首页的地址,要求浏览器马上在给我发一个刚才我给你的首页地址请求,然后再把首页的HTML文件发给浏览器
中间有两次请求
301和302的区别
301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取
(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)——这是它们的共同点。
他们的不同在于。301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;
302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。 SEO302好于301
2)重定向原因:
(1)网站调整(如改变网页目录结构);
(2)网页被移到一个新地址;
(3)网页扩展名改变(如应用需要把.PHP改成.Html或.shtml)。
这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404页面错误信息,访问流量白白丧失;再者某些注册了多个域名的
网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点等。
关于301与302
0