资讯专栏INFORMATION COLUMN

3-Django视图

asoren / 2416人阅读

摘要:概述作用视图接收请求并返回响应方法就是在视图里使用函数处理请求。

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

方法:1. FBV(function base views) 就是在视图里使用函数处理请求。

​ 2. CBV(class base views) 就是在视图里使用类处理请求。

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

过程:

URLConf

视图函数

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

方法

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

QueryDict对象
clipboard.png

GET属性

http://127.0.0.1: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)

http://127.0.0.1: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",中间件去掉

或者加上{%csrf_token}




    
    注册


    
用户名:
密码:
爱好: 权利 金钱 阅读
#views.py
def register(request):
    if request.method == "GET":
        return render(request, "register.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对象由程序员创建的;存储服务器响应给客户端的数据
用法

常见的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 response

request.COOKIES.get("sunck")
子类HttpResponseRedirect
功能: 重定向,服务器端跳转

实现

from django.http import HttpResponse, HttpResponseRedirect
def indexTemp(request):
    # 重定向到/index/
    return HttpResponseRedirect("/index/")

from django.shortcuts import render, redirect
from django.http import HttpResponse, HttpResponseRedirect

def indexTemp(request):
    # 重定向到/index/, HttpResponseRedirect很少用了,一般用redirect
    # return HttpResponseRedirect("/index/")
    return redirect("/index")
子类JsonResponse

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

优点: 帮助用户创建JSON编码响应; 参数是字典对象,如果传入不是字典格式比如列表,设置参数safe=False;JsonResponse的默认Content-Type为application/json,不需要我们写了。

状态保持 概述

启用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 logout
def quit(request):
    logout(request)
    return redirect("/home/")
过期时间

存储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=6379
SESSION_REDIS_DB=0
SESSION_REDIS_PASSWORD=""
SESSION_REDIS_PREFIX="session"

#通过redis-cli客户端可以查看:
127.0.0.1:6379> select 0
OK
127.0.0.1:6379[4]> keys *
1) "session:0bjyuegx0i5ivyuzpb8ezgo0b35u2z4v"

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42251.html

相关文章

  • 3-django——视图

    摘要:概述作用视图接收请求并返回响应本质视图就是一个函数,被定义在文件中响应可以是一个页面,一个重定向,一个错误一个数据等等过程视图函数对象概述服务器接收到协议的请求后,会根据报文创建对象视图函数的一个形参就是对象属性方法如果请求是通过类发起的, 概述 作用:视图接收WEB请求并返回WEB响应本质: 视图就是一个python函数,被定义在views.py文件中 响应: 可以是一个HTML页面...

    dinfer 评论0 收藏0
  • Django 2.0 发布,都有哪些新特性要注意?

    摘要:是开发最常用的框架之一,跟进它的最新变化绝对是必须的。年月日,官方发布了版本,成为多年来的第一次大版本提升,那么对广大使用者有哪些变化和需要注意的地方呢一兼容性支持和。 Django 是 Python Web 开发最常用的框架之一,跟进它的最新变化绝对是必须的。 2017年12月2日,Django官方发布了2.0版本,成为多年来的第一次大版本提升,那么2.0对广大Django使用者有哪...

    RancherLabs 评论0 收藏0
  • Python学习之路17-Django入门

    摘要:编程从入门到实践笔记。执行命令后,项目的根目录下会多出一个名为的数据库文件。下面创建一个主题类用户学习的主题返回模型的字符串表示类是中的一个定义了模型基本功能的类。这种交互式环境称为,常用语测试项目和排除故障。 《Python编程:从入门到实践》笔记。从本篇开始将是该书的最后一个项目,将用3篇文章来介绍Django的基础。完成一个学习笔记的小网站。 1. 前言 在本篇中,我们将: 用...

    shadowbook 评论0 收藏0
  • 2-django——模型

    概述:Django对各种数据库都提供了很好的支持,Django为这些数据库提供了统一的调用接口API,程序员可以根据自己的业务需求选择不同的数据库 ORM简介 概述:对象-关系-映射 作用: 根据类生成表结构;将对象、列表的操作转换成对应的SQL语句;将SQL语句查询到的结果转换为对象或者列表 优点:极大的减轻开发人员的工作量,不需要面对因数据库的变更而导致代码无效在修改代码 图解: showIm...

    idisfkj 评论0 收藏0
  • Django学习——Django的基础3django的基本操作1)

    摘要:那就是新建一个用户,赋予该用户只能操作该数据库的权限。这是根据安全开发中的最小权限原则规定而来的,能够有效的防止网站被攻击后的代价。 基本操作将用一个简单的实例来穿针引线,将尽量涉及到多的操作方法和软件设计的原理 设计表的结构 我们想要做一个班级管理的程序,我们先去设计一下数据库表的结构。首先我们应该有一下几张表 班级表 学生表 班级表 表名:classes 班级id:id 班级...

    RancherLabs 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<