博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3-django——视图
阅读量:5945 次
发布时间:2019-06-19

本文共 5070 字,大约阅读时间需要 16 分钟。

概述

作用:视图接收WEB请求并返回WEB响应

本质: 视图就是一个python函数,被定义在views.py文件中

响应: 可以是一个HTML页面,一个重定向,一个404错误、一个JSON数据等等

过程:

clipboard.png

URLConf

clipboard.png

视图函数

clipboard.png

HttpRequest对象

概述: 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象; 视图函数的一个形参就是HttpRequest对象

属性

clipboard.png

方法

is_ajax(): 如果请求是通过XMLHTTPRequest类发起的,返回True

QueryDict对象

clipboard.png

GET属性

:8000/get1/?a=1&b=2&c=3

def get1(request):    a = request.GET.get("a")    b = request.GET.get("b")    c = request.GET.get("c")    return HttpResponse(a+"-"+b+"-"+c)

:8000/get2/?a=1&a=2&c=3

def get2(request):    alist = request.GET.getlist("a")    c = request.GET.get("c")    return HttpResponse(alist[0]+"-"+alist[1]+"-"+c)

POST属性

使用表单提交,需要将settings.py文件中的'django.middleware.csrf.CsrfViewMiddleware',中间件去掉

    
注册
用户名:

密码:

爱好:
权利
金钱
阅读

def registe(request):    if request.method == "GET":        return render(request, "registe.html")    else:        username = request.POST.get("username")        passwd   = request.POST.get("passwd")        hobbys   = request.POST.getlist("hobby")        print(username, passwd, hobbys)        return HttpResponse("注册成功")

HttpResponse对象

概述: HttpRequest对象由Django自动创建的,但是HttpResponse对象由程序员创建的;存储服务器响应给客户端的数据

用法

clipboard.png

常见的MIME类型(通用型):

  • 超文本标记语言文本 .html text/html
  • xml文档 .xml text/xml
  • XHTML文档 .xhtml application/xhtml+xml
  • 普通文本 .txt text/plain
  • RTF文本 .rtf application/rtf
  • PDF文档 .pdf application/pdf
  • Microsoft Word文件 .word application/msword
  • PNG图像 .png image/png
  • GIF图形 .gif image/gif
  • JPEG图形 .jpeg,.jpg image/jpeg
  • au声音文件 .au audio/basic
  • MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
  • RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
  • MPEG文件 .mpg,.mpeg video/mpeg
  • AVI文件 .avi video/x-msvideo
  • GZIP文件 .gz application/x-gzip
  • TAR文件 .tar application/x-tar
  • 任意的二进制数据 application/octet-stream

属性

属性 描述
content 表示返回的内容,字符串类型
charset 表示response采用的编码字符集,字符串类型
status_code 响应HTTP的状态码
content_type 指定输出的MIME类型

方法

init: 使用页面实例化HttpResponse对象

write(content):

# 以文件的方式写入,将 content 写到报文的主体中,这使得 HttpResponse 的实例类似于文件对象def index(request):    response = HttpResponse()    response.content = "sunck is a good man"    response.charset = "utf-8"    response.write("!")    response.write("very good!")    return response

flush() : 以文件的方式输出缓冲区; 在flush之后就不要在写write了

set_cookie():

原型:set_cookie(self, key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False)

作用: 设置cookie,cookie是保存在客户端的信息,以键值对的形式保存

参数:

  • key : cookie的键
  • value:cookie的值
  • max_age: 过期时间 单位秒
  • expires:设置过期时间 datetime.datetime 对象

示例:

def setcookie(request):    response = HttpResponse("sunck is a handsome man")    response.set_cookie("sunck", "good")    return responserequest.COOKIES.get("sunck")

delete_cookie(key):删除cookie

子类HttpResponseRedirect

功能: 重定向,服务器端跳转

实现

from django.http import HttpResponse, HttpResponseRedirectdef indexTemp(request):    # 重定向到/index/    return HttpResponseRedirect("/index/")from django.shortcuts import render, redirectfrom django.http import HttpResponse, HttpResponseRedirectdef indexTemp(request):    # 重定向到/index/    # return HttpResponseRedirect("/index/")    return redirect("/index")

子类JsonResponse

返回JSON数据,一般用于异步请求

优点: 帮助用户创建JSON编码响应; 参数是字典对象;JsonResponse的默认Content-Type为application/json

状态保持

概述

clipboard.png

启用session

# settings.py  默认已经启用'django.contrib.sessions','django.contrib.sessions.middleware.SessionMiddleware'

使用session

启用session后,每个HttpRequest对象都将具有一个session属性,它是一个类似字典的对象

方法 解释
get(key, default=None) 根据键获取会话的值
clear() 清除所有会话
flush() 删除当前的会话并删除会话的cookie
del request.session[键] 删除会话

示例

def home(request):    userAccount = request.session.get("userAccount", default="未登录")    return render(request, "home.html", {"userAccount":userAccount})def cart(request):    userAccount = request.session.get("userAccount", default="未登录")    return render(request, "cart.html", {"userAccount":userAccount})def login(request):    if request.method == "GET":        fromPath = request.GET.get("from")        return render(request, "login.html", {"fromPath":fromPath})    else:        userAccount = request.POST.get("userAccount")        passwd      = request.POST.get("passwd")        # 从哪里来        fromPath = request.GET.get("from")        # 验证        if userAccount == "sunck" and passwd == "sunck1999":            #登陆成功            #状态保持,将用户名写入session            request.session["userAccount"] = userAccount                        fromPath = "/" + fromPath + "/"            return redirect(fromPath)        else:            #登陆失败            return redirect("/login/?from=%s"%fromPath)from django.contrib.auth import logoutdef quit(request):    logout(request)    return redirect("/home/")

过期时间

clipboard.png

存储session

基于数据库的会话: 默认的会话存储方式

SESSION_ENGINE='django.contrib.sessions.backends.db'

基于缓存的会话: 只存在本地内存中,如果丢失则不能找回,比数据库的方式读写更快

SESSION_ENGINE='django.contrib.sessions.backends.cache'

同时基于缓存和数据库的会话: 有限从本地缓存中获取,如果没有则从数据库中获取

SESSION_ENGINE='django.contrib.sessions.backends.cached_db'

使用redis缓存session

SESSION_ENGINE='redis_sessions.session'SESSION_REDIS_HOST='localhost'SESSION_REDIS_PORT=6379SESSION_REDIS_DB=0SESSION_REDIS_PASSWORD='sunck'SESSION_REDIS_PREFIX='session'

转载地址:http://iuzxx.baihongyu.com/

你可能感兴趣的文章
闭包 !if(){}.call()
查看>>
python MySQLdb安装和使用
查看>>
Java小细节
查看>>
poj - 1860 Currency Exchange
查看>>
chgrp命令
查看>>
Java集合框架GS Collections具体解释
查看>>
洛谷 P2486 BZOJ 2243 [SDOI2011]染色
查看>>
linux 笔记本的温度提示
查看>>
数值积分中的辛普森方法及其误差估计
查看>>
Web service (一) 原理和项目开发实战
查看>>
跑带宽度多少合适_跑步机选购跑带要多宽,你的身体早就告诉你了
查看>>
广平县北方计算机第一届PS设计大赛
查看>>
深入理解Java的接口和抽象类
查看>>
java与xml
查看>>
Javascript异步数据的同步处理方法
查看>>
iis6 zencart1.39 伪静态规则
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
基于事件驱动的DDD领域驱动设计框架分享(附源代码)
查看>>
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>