在Django MTV模式中,View视图负责业务逻辑部分,路由系统接收到HTTP请求,并将任务分配给相应的视图函数,由视图函数来负责响应这个请求。不管视图自己包含什么逻辑,都要返回响应。
在这里HTTP请求中产生两个核心对象:
HTTP请求:HttpRequest对象
HTTP响应:HttpResponse对象
所在位置:django.http
在Django项目中,一个app内的视图函数都放在views.py中php
def register(request): # 一个视图函数 print(request)
HttpRequest对象的属性和方法html
request.path 获取路径 request.get_full_path() 带数据的路径 request.method 请求方式("POST"/"GET") request.GET 包含全部HTTP GET参数的类字典对象 request.POST 包含全部HTTP POST参数的类字典对象 name = request.POST.get("user") 获取提交的数据(form表单中name属性为user的 用户输入文本值) pwd = request.POST.get("pwd")(form表单中name属性为pwd的 用户输入的文本值) 服务器收到空的POST请求的状况也是可能发生的,也就是说,表单form经过HTTP POST方法提交请求,可是表单中可能没有数据,所以不能使用 if request.POST来判断是否使用了HTTP POST 方法;应该使用 if request.method=="POST" request.COOKIES 包含全部cookies的标准Python字典对象;keys和values都是字符串。 FILES: 包含全部上传文件的类字典对象;FILES中的每个Key都是<input type="file" name="" />标签中name属性的值,FILES中的每个value同时也是一个标准的python字典对象,包含下面三个Keys: filename: 上传文件名,用字符串表示 content_type: 上传文件的Content Type content: 上传文件的原始内容 request.user 是一个django.contrib.auth.models.User对象,表明当前登录的用户。若是访问用户当前没有登录,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。 你能够经过user的is_authenticated()方法来辨别用户是否登录:if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware时该属性才可用 request.session 惟一可读写的属性,表明当前会话的字典对象;本身有激活Django中的session支持时该属性才可用。 request.META 包含了全部本次HTTP请求的Header信息,是一个python字典。这个字典中常见的键值有: HTTP_REFERER 进站前连接网页,能够用来统计网站流量来源。 (请注意,它是REFERRER的笔误) HTTP_USER_AGENT 用户浏览器标识,能够获知浏览器的型号版本等信息。 REMOTE_ADDR 客户端IP(若是申请是通过代理服务器的话,那么它多是以逗号分割的多个IP地址)
HttpResponse对象的属性和方法python
页面渲染: 推荐用render(request,"模板.html",{}) 第三个参数能够是键值对,也能够是locals()函数 页面跳转: redirect("路径") locals() 能够直接将函数中全部的变量传给模板 render和redirect的区别: redirect跳转将会使url发生改变,而render不会改变。要在合适的时候使用redirect
示例:数据库
url.py中: url(r"login", views.login), url(r"yse", views.yes), views.py中: def login(request): if request.method == "POST": if request.POST.get("user") == "alex" and request.POST.get("pwd") == "666": return redirect("/yes/") return render(request,"login.html",locals()) def yes(request): name = "alex" return render(request,"yes.html",locals()) login.html中: <form action="/register/" method="post"> <div class="input"> <input type="text" class="inputs" placeholder="用户名" name="user"> </div> <div class="input"> <input type="password" class="inputs" placeholder="密码" name="pwd"> </div> <input type="button" class="button" value="注册"> </form> yes.html中: <h1>{{ name }}你好!</h1> 总结: render和redirect的区别: 1. render的页面须要模板语言渲染,即须要将数据库的数据加载到html,那么全部的这些数据除了写在yes的视图函数中,必须还要写在login中,代码重复,没有解耦. 2. 最重要的: url没有跳转到/yes/,而是还在/login/,因此当刷新后又得从新登陆。
转载于猿2048:➭《Django view(视图)》django