Django学习——3.Django的视图层

本文深入解析Django视图层,涵盖基础模板返回、时间响应、错误处理、重定向、类视图及HttpResponse的子类如JsonResponse和set_cookie。理解如何构造视图函数以响应不同请求并管理会话数据。
摘要由CSDN通过智能技术生成

项目名:mydemo2

Python版本:3.7.0

Django版本:3.2.0


Django的视图层(View)介绍

  • Django框架中的视图(View)是用来负责处理用户请求和返回响应的逻辑程序。
  • 视图(View)简而言之就是一个Python的函数或方法,接受Web请求并且返回Web响应。
  • 无论视图本身包含什么逻辑,都要返回响应,响应可以是网页的HTML内容,重定向或404错误,XML文档或图像。
  • 视图层中包含两个重要对象:请求对象(request)和响应对象(HttpResponse)。
  • 视图的代码通常是放在view.py文件中,此文件放在项目主目录或应用程序目录中。 

1.返回一个模板

from django.shortcuts import render

def index(request):
    return render(request,'index.html')

2.返回当前时间的简单视图

from django.http import HttpResponse
import time

def nowtime(request):
    now=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())
    html="<html><body>现在的时间是%s</body><html>"%now
    return HttpResponse(html)

 

3.返回一个错误页面 

def error(request):
    # 直接返回一个404,没有去加载404的模板页面
     return HttpResponseNotFound('<h1>Page not found</h1>')

    # 可以直接返回一个status状态码
    # return HttpResponse(status=403)

    # 返回一个404的错误页面
    #raise Http404("Poll does not exist")

 

 

 

 4.重定向

重定向就是通过方法将网络请求重新定向跳转到其他位置

from django.shortcuts import redirect
from django.urls import reverse

def resp(request):
    # redirect重定向  reverse反向解析url地址
    return redirect(reverse('nowtime'))  #重定向到时间显示页面

    #执行一段js代码,用js进行重定向
    #return HttpResponse('<script>alert("跳转成功");location.href = "/nowtime"; </script>')

    # 加载一个提醒信息的跳转页面
    # context = {'info': '跳转成功'}
    # return render(request, 'info.html', context)

 5.基于类的基本视图

views.py

from django.views import View

class MyView(View):
    def get(self, request, *args, **kwargs):
        return HttpResponse('这是一个类')

myapp/urls.py

from django.urls import path,include
from . import views
from myapp.views import MyView

urlpatterns = [
    path('',views.index,name='index'),  #首页
    path('nowtime/',views.nowtime,name='nowtime'),  #当前时间
    path('error/',views.error,name='error'),  #错误页面
    path('resp/',views.resp,name='resp'),  #重定向
    path('class/',MyView.as_view(),name='class')  #基于类的基本视图
]

其中as_view()是接受请求并返回响应的可调用视图['get','post','put', 'patch','delete,'options'.]


HttpResponse对象 

  • HttpResponse():返回文本,参数为字符串,字符串中写文本内容。如果参数为字符串里含有 html 标签,也可以渲染。
  • 在django.http模块中定义了HttpResponse对象的API。
  • HttpRequest对象由Django自动创建,HttpResponse对象由程序员创建。
  • 每个视图函数都必须返回一个HttpResponse对象或HttpResponse子对象。

返回模板、返回文本和重定向上述示例都已说明,下面主要介绍子类JsonResponse和set_cookie方法

1.子类JsonResponse

  • 返回json数据,一般用于异步请求
  • 帮助用户创建JSON编码的响应
  • JsonResponse的默认Content-Type为application/json
from django.http import JsonResponse

#json数据的响应
def response_json(request):
    data=[
        {'id': 101, 'name': 'aa', 'age': 20},
        {'id': 102, 'name': 'bb', 'age': 23},
        {'id': 103, 'name': 'cc', 'age': 25},
        {'id': 104, 'name': 'dd', 'age': 27},
    ]
    return JsonResponse({'data':data})

 注:响应体中只支持字典类型的数据,因此要先将data列表封装成字典。

 2.set_cookie方法

  • Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息。
  • 服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。
  • Cookies最典型的应用是判定注册用户是否已经登录网站
def cookie(request):
    # 获取当前的 响应对象
    response = HttpResponse('set_cookie方法')
    # 使用响应对象进行cookie的设置
    response.set_cookie('first_cookie', 'abc123')
    # 返回响应对象
    return response


HttpRequest对象 

  • 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象
  • 视图函数的第一个参数是HttpRequest对象
  • 在django.http模块中定义了HttpRequest对象的API

属性(若无特别说明,则都是只读属性)

  • path:一个字符串,表示请求的页面的完整路径,不包含域名

  • method:一个字符串,表示请求使用的HTTP方法,常用值包括:'GET'、'POST'

  • encoding:一个字符串,表示提交的数据的编码方式(这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,如果为None,则使用默认设置utf-8)

  • GET:一个类似于字典的对象,包含get请求方式的所有参数

  • POST:一个类似于字典的对象,包含post请求方式的所有参数

  • FILES:一个类似于字典的对象,包含所有的上传文件

  • COOKIES:一个标准的Python字典,包含所有的cookie,键和值都为字符串

  • session:一个既可读又可写的类似于字典的对象,表示当前的会话,只有当Django 启用会话的支持时才可用,详细内容见“状态保持”

方法 

  • is_ajax():如果请求是通过XMLHttpRequest发起的,则返回True

QueryDict对象

  • 定义在django.http.QueryDict
  • request对象的属性GET、POST都是QueryDict类型的对象
  • 与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况
  • 方法get():根据键获取值

get方法只能获取键的一个值,如果一个键同时拥有多个值,获取最后一个值

dict.get('键',default),或dict['键']

  • 方法getlist():根据键获取值 

将键的值以列表返回,可以获取一个键的多个值

 dict.getlist('键',default)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值