什么是视图:
之前我们也了解了urls路由 那么路由的主要作用是决定你下一步走哪个视图函数 ,视图就是用来存放一个个的函数的python文件,主要存储的函数就是你Django主要的流程的控制 都存放在一起就称这个文件为视图views
视图层之视图函数(views):
一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你的Python目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,约定是将视图放置在项目或应用程序目录中的名为views.py的文件中。
一个简单的视图函数
-----views.py
from django.shortcuts import render,HttpResponse
from django.urls import reverse
import time
# Create your views here.
def timer(request): #request这个参数必须有 因为你的url路由分配的时候会默认将请求信息传递进来request就是接受所有的请求信息的
ctime = time.time()#时间戳
s = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(ctime))
# return HttpResponse() #HttpResponse 的里面放置的必须是字符串
return render(request,'time.html',{'t':s})
注意:视图会返回一个HttpResponse对象,其中包含生成的响应。每个视图函数都负责返回一个HttpResponse对象。
让我们逐行阅读上面的代码:
首先,我们从 django.shortcuts模块导入了HttpResponse类,以及Python的datetime库。
-
接着,我们定义了timer函数。它就是视图函数。每个视图函数都使用HttpRequest对象作为第一个参数,并且通常称之为request。
注意,视图函数的名称并不重要;不需要用一个统一的命名方式来命名,以便让Django识别它。我们将其命名为timer,是因为这个名称能够精确地反映出它的功能。
这个视图会返回一个HttpResponse对象,其中包含生成的响应。每个视图函数都负责返回一个HttpResponse对象。
HttpRequest对象
属性:
'''
path: 请求页面的全路径,不包括域名 method: 请求中使用的HTTP方法的字符串表示。全大写表示。例如 if req.method=="GET": do_something() elif req.method=="POST": do_something_else() GET: 包含所有HTTP GET参数的类字典对象 POST: 包含所有HTTP POST参数的类字典对象 COOKIES: 包含所有cookies的标准Python字典对象;keys和values都是字符串。 FILES: 包含所有上传文件的类字典对象;FILES中的每一个Key都是<input type="file" name="" />标签中
name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys: filename: 上传文件名,用字符串表示
content_type: 上传文件的Content Type
content: 上传文件的原始内容 user: 是一个django.contrib.auth.models.User对象,代表当前登陆的用户。如果访问用户当前
没有登陆,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你
可以通过user的is_authenticated()方法来辨别用户是否登陆:
if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware
时该属性才可用 session: 唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用。 '''
HttpResponse对象:
响应对象主要有三种形式:
- HttpResponse()
- render()
- redirect()
HttpResponse()括号内直接跟一个具体的字符串作为响应体,比较直接很简单,所以这里主要介绍后面两种形式。
render()
1
2
3
|
render(request, template_name[, context]) 结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。 |
参数:
request: 用于生成响应的请求对象。 template_name:要使用的模板的完整名称,可选的参数 context:添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。 render方法就是将一个模板页面中的模板语法进行渲染,最终渲染成一个html页面作为响应体。
print(request.method) # 请求方式
print(request.path) # 这次请求路径
print(request.GET) # GET请求的请求数据 QueryDict {}
print(request.POST) # POST请求的请求数据 QueryDict {}
print(request.get_full_path()) # 包含GET请求参数的请求路径
print(request.is_ajax()) # 返回布尔值
redirect()
是重定向
def login(request):
print('')
if request.method == 'POST':
user = request.POST.get('user')
pwd = request.POST.get('pwd')
if user == '老王' and pwd == '':
return redirect('/index/') #如果条件满足直接定向到index这函数内执行views内的index
return render(request,'login.html')
render 和 redirect 的区别:
render函数和redirect函数的区别
render:只会返回页面内容,但是未发送第二次请求
redirect:发挥了第二次请求,url更新
具体实例说明
render:
redirect:
重定向就是在这个网站找不到信息了 定向到另一个网站去找信息