一、视图函数
根据需求与逻辑有关的。
http请求中产生两个核心对象:
http请求:HttpRequest对象。
http响应:HttpResponse对象。
所在位置:djangohttp
之前我们用到的参数request就是HttpRequest 检测方法:isinstance(request,HttpRequest)
HttpRequest对象的属性:
''' path: 请求页面的全路径,不包括域名
一个字符串,表示请求的路径组件(不含域名)。 例如:"/music/bands/the_beatles/"
method: 请求中使用的HTTP方法的字符串表示。全大写表示。
例如 if request.method=="GET": do_something()
elif request.method=="POST": do_something_else()
GET: 一个类似于字典的对象,包含 HTTP GET 的所有参数。详情请参考 QueryDict 对象。
POST: 一个类似于字典的对象,如果请求中包含表单数据,则将这些数据封装成 QueryDict 对象。
POST 请求可以带有空的 POST 字典 —— 如果通过 HTTP POST 方法发送一个表单,但是表单中没有任何的数据,QueryDict 对象依然会被创建。
因此,不应该使用 if request.POST 来检查使用的是否是POST 方法;应该使用 if request.method == "POST"
另外:如果使用 POST 上传文件的话,文件信息将包含在 FILES 属性中。
注意:键值对的值是多个的时候,比如checkbox类型的input标签,select标签,需要用:request.POST.getlist("hobby")
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对象:
HttpRequest对象是django自动创建的,在视图函数里形参request是直接接收的,是django传过来的,django会把前端所有的信息打包好给这个对象传给视图函数。
HttpResponse对象使我们自己创建的,HttpResponse是个类,类加括号就是在实例化一个对象。
每一个view请求处理方法都必须返回一个HttpResponse对象,因为这是给前端看的内容。
响应对象主要有三种形式:
- HttpResponse()
- render()
- redirect()
HttpResponse()括号内直接跟一个具体的字符串作为响应体,比较直接很简单,所以这里主要介绍后面两种形式。
render 函数
render(request, template_name,[context])
结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。
参数: request: 用于生成响应的请求对象。 template_name:是一个路径,要使用的模板的完整名称,可选的参数 context:添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。
locals()方法
如果一个逻辑里面有很多变量,可以用locals()本地变量的意思,仅仅需要把 locals()方法放到渲染的参数位置上。
def index(request): name = 'zhangrenguo' age = 18 return render(request,'index.html',locals())
然后在html文档里用的时候直接写变量名。
<h1>locals的用法{{ name }}</h1> <h1>直接在HTML里写变量名{{ age }}</h1>
redirect()
redirect()重定向,页面跳转用的。
redirect(url),走url路径,执行对应的函数。
登录的时候一般都用redirect()。
例子里我们用了路由分发:
render和redirect的区别?
1