Django入门教程

前言

第一章: django快速入门

第二章: django MTV架构

第三章: django视图

第四章: django模板

第五章: django模型

第六章: django后台管理系统

第七章: 项目实战-简易的博客系统

第八章:django表单

第九章:django用户认证系统

第十章:django中的会话

第十一章:django安全

第十二章:django性能优化

第十三章:django实用工具

首页 > Django入门教程 > 第三章: django视图 > 3.2节: 函数类型视图

3.2节: 函数类型视图

薯条老师 2020-07-17 15:17:55 253388 2

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6

3.2.1 函数类型视图

函数类型的视图,是指以函数单元的形式来对客户端的请求进行处理。django函数视图的定义语法:

def view_name(request):
    return HttpResponse()

view_name表示定义的函数视图名称,request是django内置的HttpRequest对象,为必传参数。客户端的HTTP请求方法,查询参数等都可以在HttpRequest对象中进行获取。 http协议为请求响应式的协议,django视图在收到客户端的请求以后,必须返回HttpResponse对象或HttpResponse的子类对象。

 在视图中使用HttpResponse需要从django.http中进行导出

3.2.2 HttpRequest对象

HttpRequest对象的常用属性:

属性名

描述

scheme

字符串类型,表示请求的协议类型,通常为http或https

path

字符串类型,表示客户端的请求路径

method

字符串类型,表示客户端的http请求方法,值为大写形式,例如GET或POST

encoding

字符串类型,表示客户端提交的数据的编码方式,默认为utf-8编码

GET

类似字典类型的对象,通过该属性可以获取http get方法的查询参数

POST

类似字典类型的对象,通过该属性可以获取http post方法提交的参数

COOKIES

字典类型的对象,存储了cookie信息,键名与键值都为字符串类型

FILES

类似于字典的对象,包含所有的上传文件信息。FILES 中的每个键为html input文件类型标签中的name,键值为对应的数据。

注意,FILES 只有在请求的方法为POST 且form表单enctype属性的值为“multipart/form-data”时才会包含数据。否则,FILES 将为一个类似于字典的空对象。

3.2.3 HttpResponse对象

HttpResponse类的构造函数:

HttpResponse.__init__(content=b'', content_type=None, status=200, reason=None, charset=None)

参数解释:

(1) content:响应给客户端的内容,默认为空的字节字符串,content参数支持的类型主要有:迭代器,字符串,字节类型字符串。迭代器迭代出的元素必须为字符串或字节类型的字符串

(2) content_type: 表示传递的MIME类型,参数值默认为None,当为None时实际响应的是text/html类型

(3) status:  响应的http状态码,默认为200

(4) reason: http状态码所对应的描述信息,默认为None

(5) charset: 服务端响应的数据的编码方式,值为None时,表示默认为utf-8编码。

HttpResponse对象的常用属性:

属性名                     


描述

content

字符串类型,表示返回的内容

content-type

字符串类型,表示MIME类型,默认为text/html

status_code

整型,表示响应的http状态码

reason_phrase

字符串类型,表示http状态码所对应的描述信息

charset

字符串类型,表示响应内容的字符编码,默认为utf-8

HttpResponse对象的常用方法:

方法名

描述

write(content)

将响应的内容写入数据缓冲区中

writelines(lines)

lines是一个列表类型,表示将多行内容写入数据缓冲区中

flush()

刷新数据缓冲区

set_cookie(key, value='', max_age=None,expires=None)

设置cookie信息,key表示cookie的键名,value表示键值。max_age是一个整数,表示在指定秒数后过期。

expires是一个"Wdy, DD-Mon-YY HH:MM:SS GMT" 格式的字符串对象或者UTC格式的datetime对象,表示在这个指定的日期/时间过期。

max_age与expires二选一。如果不指定过期时间,cookie会在关闭浏览器后自动过期。

 

set_cookie方法同时提供了与跨域相关的参数,在后续教程中会继续进行讲解。

 

3.2.3 在浏览器中进行加减乘除运算

现在通过函数类型视图,来对客户端的查询请求进行加减乘除运算,并将运算结果返回给客户端(浏览器)。请读者按照以下步骤来进行操作:

(1) 打开blog目录下的views.py,新增arithmetic视图

更新后的代码为:

from django.shortcuts import render
from django.views import View
 
# 从django.http中导出HttpResponse类型
from django.http import HttpResponse
 
# Create your views here.
 
class Home(View):
    def get(self, request):
        return render(request, "home.html")
 
# 新增的arithmetic视图
def arithmetic(request):
    """
    获取url中的查询参数action,action的取值为:+,-,*,/
    分别表示加法运算,减法运算,乘法运算,除法运算
    """
    action = request.GET.get('action', '+')
    
    """
    获取url中的查询参数a和b,a和b分别代表算数运算的左操作数和右操作数
    获取到的参数为字符串类型,故要转换为数值类型来进行算数运算
    """
    a = int(request.GET.get('a', 0))
    b = int(request.GET.get('b', 0))
    commands = {"+": lambda x,y: x+y, "-": lambda x,y: x-y, "*": lambda x,y: x*y, "/": lambda x, y: x / y}
    if action == "/" and b ==  0:
        result = 0
    else:
        result = commands.get(action, lambda x,y: 0)(a, b)
    # 构造HttpResponse对象,将运算结果直接返回给客户端
    return HttpResponse(str(result))

(2) 打开chips目录中的urls.py,定义url与arithmetic视图的路由

更新后的代码为:

from django.contrib import admin
from django.urls import path
 
# 导出blog下的views.py,这样才能访问到对应的视图
import blog.views as blog
 
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', blog.Home.as_view()),
    # 新增后的url路由
    path('arithmetic/', blog.arithmetic),
]

(3) 进入windows命令行,切换到D盘的django-project目录,启动blog应用

切换到django-project目录后,输入python manage.py runserver 8080, 启动blog应用:

D:\Django-project>python manage.py runserver 8080

Watching for file changes with StatReloader

Performing system checks...

 

System check identified no issues (0 silenced).

July17, 2020 - 15:35:19

django version 2.2.6, using settings 'chipscoco.settings'

Starting development server at http://127.0.0.1:8080/

Quit the server with CTRL-BREAK.

(1) 打开浏览器进行算数运算测试

打开浏览器,在地址栏中输入http://127.0.0.1:8080/arithmetic/?a=1&b=3&action=-,测试减法运算:

image.png

在地址栏中输入http://127.0.0.1:8080/arithmetic/?a=1&b=3&action=*,测试乘法运算:

image.png

在地址栏中输入http://127.0.0.1:8080/arithmetic/?a=1&b=3&action=/,测试除法运算:

image.png

+符号在http url中属于特殊字符,需要使用其转义字符%2B,在地址栏中输入http://127.0.0.1:8080/arithmetic/?a=1&b=3&action=%2b,测试加法运算:

image.png

3.2.4 最具实力的小班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,包拿Offer
(3) 数据分析高薪就业班,月薪11K-15K, 免费领取课程大纲
(4)
Python大数据挖掘,量化投资就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取Python学习资料:


已有2位薯条发表了看法:

  • 访客

    访客  评论于 2020-08-24 16:12:53  回复

    action = request.GET.get('action', '+')
    # 这个‘+’ 错了吧?为什么有+

    • 薯条老师

      薯条老师  评论于 2020-08-25 07:14:29  回复

      同学,没错,你认真看一下

欢迎 发表评论: