Django之视图

一个视图函数(类),称之为视图。将视图放置在项目(project)或应用程序(app01) 目录中的名为vie.py文件中。

FBV和FBV

FBV  -> 把视图写成一个函数
CBV  -> 把视图写成一个类

        FBV:
        def login(request):
            # 在函数中如何区分GET请求和POST请求
            if request.method == "GET":
                # 这是GET请求  -> 获取一个页面
            if request.method == "POST":
                # POST请求     -> 提交数据

        CBV
        导入基类
        from django.views import View
        class Login(View):

            def dispatch(self):
                在请求前和请求之后执行
                hasattr("get")

                等到后面讲cookie和session时候再讲(登录)

            def get(self, request):
                # 这是GET请求

            def post(self, request):
                # POST请求

Form表单提交数据,三要素:
1. form标签的属性:action=“提交的URL地址”,method=“POST”, 不写method默认是GET请求
2. form表单里面要包含有一个submit按钮
3. input、select(下拉框)、checkbox(单选框)、radio、textarea必须有name属性

Request对象

属性:
  django将请求报文中的请求行、头部信息、内容主体封装成 HttpRequest 类中的属性。
除了特殊说明的之外,其他均为只读的。
1.request.method
  一个字符串,表示请求使用的HTTP 方法。必须使用大写。
  例如:"GET"、"POST"
2.request.POST
3.request.GET
4.request.path
  一个字符串,表示请求的路径组件(不含域名)。
  例如:"/music/bands/the_beatles/"
5.request.FILES
  一个类似于字典的对象,包含所有的上传文件信息。
   FILES 中的每个键为<input type="file" name="" /
  enctype="multipart/form-data"> 中的name,值则为对应的数据。     注意,FILES 只有在请求的方法为POST 且提交的<form> 带有enctype="multipart/form-data" 的情况下才会 包含数据。  否则,FILES 将为一个空的类似于字典的对象

Request方法

1.request.get_host()
  例如:"127.0.0.1:8000"
  注意:当主机位于多个代理后面时,get_host() 方法将会失败。除非使用中间件重写代理的首部。
2.request.get_full_path() 
  返回 path,如果可以将加上查询字符串。
  例如:"/music/bands/the_beatles/?print=true"
3.request.get_signed_cookie(key, default=RAISE_ERROR, salt=‘‘, max_age=None)) 

 返回签名过的Cookie 对应的值,如果签名不再合法则返回django.core.signing.BadSignature。

  如果提供 default 参数,将不会引发异常并返回 default 的值。

  可选参数salt 可以用来对安全密钥强力攻击提供额外的保护。max_age 参数用于检查Cookie 对应的时间戳以确保Cookie 的时间不会超过max_age 秒。

4.request.is_ajax()
  如果请求是通过XMLHttpRequest 发起的,则返回True,方法是检查 HTTP_X_REQUESTED_WITH 相应的首部是否是字符串‘XMLHttpRequest‘。

  大部分现代的 JavaScript 库都会发送这个头部。如果你编写自己的 XMLHttpRequest 调用(在浏览器端),你必须手工设置这个值来让 is_ajax() 可以工作。

  如果一个响应需要根据请求是否是通过AJAX 发起的,并且你正在使用某种形式的缓存例如Django 的 cache middleware,
   你应该使用 vary_on_headers(‘HTTP_X_REQUESTED_WITH‘) 装饰你的视图以让响应能够正确地缓存。
5.如果POST请求提交过来的数据某一项有多个值:

  比如说:多选的select >option (name写在select上)
            checkbox   (多项时name值一样)

  request.POST.getlist("hobby")

  request.POST 里面没有文件相关内容

示例:

<select name="num" id="" multiple>    <option value="1">一</option>    <option value="2">二</option>    <option value="3">三</option></select>

<input name="num2" type="checkbox" value="66"><input name="num2" type="checkbox" value="88"><input name="num2" type="checkbox" value="99">

<input type="submit" value="提交">

Response对象

与由Django自动创建的HttpRequest对象相比,HttpResponse对象是我们的职责范围了。我们写的每个视图都需要实例化,填充和返回一个HttpResponse。

HttpResponse类位于django.http模块中。

使用

传递字符串

from django.http import HttpResponse
response = HttpResponse("Here‘s the text of the Web page.")
response = HttpResponse("Text only, please.", content_type="text/plain")

设置或删除响应头信息

response = HttpResponse()
response[‘Content-Type‘] = ‘text/html; charset=UTF-8‘
del response[‘Content-Type‘]

属性

HttpResponse.content:响应内容

HttpResponse.charset:响应内容的编码

HttpResponse.status_code:响应的状态码

JsonResponse对象

JsonResponse是HttpResponse的子类,专门用来生成JSON编码的响应。

from django.http import JsonResponse

response = JsonResponse({‘foo‘: ‘bar‘})
print(response.content)

b‘{"foo": "bar"}‘

默认只能传递字典类型,如果要传递非字典类型需要设置一下safe关键字参数。

response = JsonResponse([1, 2, 3], safe=False)

Django shortcut functions

官方文档

render()

render(request, template_name[, context])

结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。

其默认的Content-Type标头设置为application/json。

参数:
     request: 用于生成响应的请求对象。

     template_name:要使用的模板的完整名称,可选的参数

     context:添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。

     content_type:生成的文档要使用的MIME类型。默认为 DEFAULT_CONTENT_TYPE 设置的值。

     status:响应的状态码。默认为200。

一个简单的例子:
from django.shortcuts import render

def my_view(request):
    # 视图的代码写在这里
    return render(request, ‘myapp/index.html‘, {‘foo‘: ‘bar‘})

上面的代码等于:

from django.http import HttpResponse
from django.template import loader

def my_view(request):
    # 视图代码写在这里
    t = loader.get_template(‘myapp/index.html‘)
    c = {‘foo‘: ‘bar‘}
    return HttpResponse(t.render(c, request))

redirect()

参数可以是:

  • 一个模型:将调用模型的get_absolute_url() 函数
  • 一个视图,可以带有参数:将使用urlresolvers.reverse 来反向解析名称
  • 一个绝对的或相对的URL,将原封不动的作为重定向的位置。

默认返回一个临时的重定向;传递permanent=True 可以返回一个永久的重定向。

示例:

你可以用多种方式使用redirect() 函数。

传递一个对象(ORM相关)

将调用get_absolute_url() 方法来获取重定向的URL:

from django.shortcuts import redirect

def my_view(request):
    ...
    object = MyModel.objects.get(...)
    return redirect(object)

传递一个视图的名称

def my_view(request):
    ...
    return redirect(‘some-view-name‘, foo=‘bar‘)

传递要重定向到的一个具体的网址

def my_view(request):
    ...
    return redirect(‘/some/url/‘)

当然也可以是一个完整的网址

def my_view(request):
    ...
    return redirect(‘http://example.com/‘)

默认情况下,redirect() 返回一个临时重定向。以上所有的形式都接收一个permanent 参数;如果设置为True,将返回一个永久的重定向:

def my_view(request):
    ...
    object = MyModel.objects.get(...)
    return redirect(object, permanent=True) 

原文地址:https://www.cnblogs.com/caochao-/p/8312671.html

时间: 2024-08-13 16:30:27

Django之视图的相关文章

Django高级视图和URL配置

URLconf 技巧 URLconf没什么特别的,就象 Django中其它东西一样,它们只是 Python代码.你可以在几方面从中得到好处,正如下面所描述的. 流线型化(Streamlining)函数导入 看下这个 URLconf,它是建立在第三章的例子上: from django.conf.urls.defaults import * from mysite.views import current_datetime, hours_ahead, hours_behind, now_in_chi

Django之视图(views.py)

1,视图的作用就是URL和模板的连接器,我们在浏览器中输入URL,Django通过视图找到相应的模板,然后返回给浏览器. 2,视图的URL配置过程:setting中的:ROOT_URLCONF,然后是项目中的url.py的配置,然后是APP中的url.py的配置 setting: ROOT_URLCONF = 'lianxi03.urls' 项目url: from django.contrib import admin from django.urls import path,include u

Django之视图函数总结

Django之视图函数总结 HttpRequest与HttpResponse http请求中产生两个核心对象: HttpRequest对象:用户请求相关的所有信息(对象) HttpResponse对象:响应字符串 HttpRequest对象的属性和方法: request.path # 获取访问文件路径 request.method #获取请求中使用的HTTP方式(POST/GET) request.body #含所有请求体信息 是bytes类型 request.GET #GET请求的数据(类字典

Django 定义视图函数

Django 定义视图函数 视图函数主要在Django项目内app下的 views.py 文件内定义 # 调用模块方法 from django.shortcuts import render,HttpResponse,redirect def func() # 包含所有的请求数据 .... # 返回字符串内容 return HttpRespon('字符串') # 返回数据 render(request,'模板路径') 返回html模板内容 return render(request,'index

Django之视图(view)

Django之视图(view) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应.简单理解就是接受请求返回响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片等等.无论视图本身包含什么逻辑,都要返回响应.代码写在哪里也无所谓,只要它在你当前项目目录下面.为了形成一致的标准,将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中. 先给个例子,体会一下: from

django(二)视图和URL配置

创建一份视图: 在上一节,使用django-admin.py startproject制作的mysite文件夹中,创建一个叫做views.py的空文件.这个Python模块健柏寒这一章的视图. views.py文件的内容: from django.http import HttpResponse def hello(request): return HttpResponse("hell world") 我们定义一个叫做hello的视图函数: 每个视图函数至少要有一个参数,通常被叫做re

Django:视图和URL配置

一.视图 1.在mysite文件夹下.创建views.py文件(文件名称没有特别的要求): from django.http import HttpResponse def hello(request): return HttpResponse("Hello world") 2.改动mysite文件夹下的urls.py文件: from django.conf.urls import url from django.contrib import admin from mysite.vie

Django的视图系统

视图(views)概述 在前几篇文章中介绍了,client端通过http请求——去url的路由找到相应的视图函数——触发视图函数——再去modes取数据——取到数据后——再通过创建模——views函数把相响应对象——返回给client最终显示的内容 视图文件(views.py)在app目录下才有 看看新建项目默认的views.py文件的内容 from django.shortcuts import render # Create your views here. 通过相应的url请求来写不同请求

python django -3 视图

视图 视图接受Web请求并且返回Web响应 视图就是一个python函数,被定义在views.py中 响应可以是一张网页的HTML内容,一个重定向,一个404错误等等 响应处理过程如下图: URLconf 在settings.py文件中通过ROOT_URLCONF指定根级url的配置 urlpatterns是一个url()实例的列表 一个url()对象包括: 正则表达式 视图函数 名称name 编写URLconf的注意: 若要从url中捕获一个值,需要在它周围设置一对圆括号 不需要添加一个前导的

Django中视图总结[urls匹配,HttpRequest对象,HttpResponse对象,对象序列化接受及案例]

视图的功能: 接收请求,进行处理,返回应答. 视图返回的内容为: HttpResponse的对象或子对象 render 返回的是HttpResponse的对象 JsonResponse是HttpResponse的子类 HttpResponseRedirect也是HttpResonse的子类 redirect是HttpResponseRedirect的一个简写 总结:所以视图返回的内容一般为:render,redirect,JsonResponse,Httpresponse 定义视图函数分为两步