Django之视图函数总结

HttpRequest与HttpResponse

http请求中产生两个核心对象:

HttpRequest对象:用户请求相关的所有信息(对象)

HttpResponse对象:响应字符串

HttpRequest对象的属性和方法:

request.path       # 获取访问文件路径

request.method   #获取请求中使用的HTTP方式(POST/GET)

request.body      #含所有请求体信息 是bytes类型

request.GET        #GET请求的数据(类字典对象)  请求头中的url中?后面拿值
request.POST     # POST请求的数据(类字典对象) 请求体里拿值 request.COOKIES     #包含所有cookies的标准Python字典对象;keys和values都是字符串。 request.FILES: 包含所有上传文件的类字典对象;FILES中的每一个Key都是<input type="file" name="" />标签中
    name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys:      filename: 上传文件名,用字符串表示
     content_type: 上传文件的Content Type
     content: 上传文件的原始内容 request.user: 是一个django.contrib.auth.models.User对象,代表当前登陆的用户。如果访问用户当前
    没有登陆,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你
    可以通过user的is_authenticated()方法来辨别用户是否登陆:
    if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware
    时该属性才可用 request.session:    唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用 request.GET.get('name')    拿到GET请求里name的值 如果某个键对应有多个值,则不能直接用get取值,需要用getlist,如: request.POST.getlist("hobby") 请求url:http://127.0.0.1:8000/index.html/23?a=1 request.path : 请求路径
request.path结果为:/index.html/23 request.get_full_path()
request.get_full_path()结果为:/index.html/23?a=1 键值对的值是多个的时候,比如checkbox类型的input标签,select标签,需要用:
request.POST.getlist("hobby")

  

  

HttpResponse对象的属性和方法:

对于HttpRequest对象来说,是由django自动创建的,但是,HttpResponse对象就必须我们自己创建。每个view请求处理方法必须返回一个HttpResponse对象。
HttpResponse类在django.http.HttpResponse 在HttpResponse对象上扩展的常用方法: 页面渲染:(返回一个页面)
render()(推荐)
render_to_response() 页面跳转:()
redirect("路径") locals():可以直接将函数中所有的变量传给模板

  

render 函数

render方法主要是将从服务器提取的数据,填充到模板中,然后将渲染后的html静态文件返回给浏览器,这里一定要注意:render渲染的是模板。

render方法的作用:将指定页面渲染后返回给浏览器。

数据主要有两部分:

给定的模板:html文件

给定的上下文字典:需要填充到html文件的变量

render()的格式:

render(request, template_name[, context])
参数:
request: 用于生成响应的请求对象。 template_name:要使用的模板的完整名称,可选的参数 context:添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。 content_type:生成的文档要使用的MIME类型。默认为DEFAULT_CONTENT_TYPE 设置的值。 status:响应的状态码。默认为200。

 

使用示例 

urls.py

from django.contrib import admin
from django.urls import path
from blog import views urlpatterns = [
path('show_time/',views.show_time),
]

view.py

from django.shortcuts import render,HttpResponse
import time def show_time(req):
t=time.ctime()
return render(req,"index.html",{"time":t})

html文件

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Now {{ time }}</h1>
</body>
</html>

巧用locals()

我们可以把变量填充给html文件,如果变量很多,我们在键值对后面添加就会很麻烦。

所以我们把所有变量都封装到locals下,包括request下的属性!!!

注意:在html文件中,使用的变量名必须和view.py文件下的对应视图函数里面的变量名相同才能使用。

现在修改view.py文件下,

retuen render(req,"index.html",{"time":t})

  

return render(req,"index.html",locals())

  

redirect 函数

参数可以是:

一个模型:将调用模型的get_absolute_url() 函数
一个视图,可以带有参数:将使用urlresolvers.reverse 来反向解析名称
一个绝对的或相对的URL,将原封不动的作为重定向的位置。
默认返回一个临时的重定向;传递permanent=True 可以返回一个永久的重定向。

  

传递一个对象
将调用get_absolute_url() 方法来获取重定向的URL:
from django.shortcuts import redirect
def my_view(request):
...
object = MyModel.objects.get(...)
return redirect(object) 传递一个视图的名称
可以带有位置参数和关键字参数;将使用reverse() 方法反向解析URL: 
def my_view(request):
...
return redirect('some-view-name', foo='bar') 传递要重定向的一个硬编码的URL
def my_view(request):
...
return redirect('/some/url/') 也可以是一个完整的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) 

  

跳转应用

register.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <form action="http://127.0.0.1:8080/register.html/" method="get" >
<p>文本框:<input type="text" name="username" placeholder="姓名"></p>
<p>密码框:<input type="password" name="passwd" placeholder=" 密码"></p>
<p>单选框:男<input type="radio" name="gender" value="men">女<input type="radio" name="gender" value="women"></p>
<p>复选框:音乐<input type="checkbox" name="hobby" value="music">电影<input type="checkbox" name="hobby" value="movice"></p>
<p>下拉输入项:
<select name="生日">
<option value=""></option>
<option value=""></option>
<option value=""></option>
</select>
</p>
<p>提交按钮:<input type="submit"></p>
<p>重置按钮:<input type="reset"></p> </form>
</body>
</html>

login.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form>
<p>用户名:<input type="text"></p>
<p>密码:<input type="password"></p>
<p><input type="submit" value="登陆"></p>
</form>
</body>
</html>

urls.py

from django.contrib import admin
from django.urls import path
from blog import views urlpatterns = [
path("register.html/",views.register),
path("login/",views.login),
]

view.py

from django.shortcuts import render,HttpResponse,redirect

def register(req):
user=req.GET.get('username')
if user=="admin":
return redirect("/login/")
return render(req,"register.html") def login(req):
return render(req,"login.html")

现在访问http://127.0.0.1:8080/register.html

提交成功后进行判读

如果用户为admin

则跳转到http://127.0.0.1:8080/login/

如果用户名不为admin

则重新返回这个页面

第一,render返回一个登陆成功后的页面,刷新该页面将回复到跳转前页面。而redirect则不会.

第二,如果页面需要模板语言渲染,需要的将数据库的数据加载到html,那么render方法则不会显示这一部分,render返回一个登陆成功页面,不会经过url路由分发系统,
也就是说,不会执行跳转后url的视图函数。这样,返回的页面渲染不成功;而redirect是跳转到指定页面,当登陆成功后,会在url路由系统进行匹配,如果有存在的映射
函数,就会执行对应的映射函数。

  

Django之视图函数总结的更多相关文章

  1. django views视图函数返回值 return redirect httpresponse总结

    django views视图函数返回值 return redirect  render httpresponse总结

  2. Django 定义视图函数

    Django 定义视图函数 一.接收内容及文件处理 1.接收分类 # 获取数据 request.GET # 提交数据 request.POST # 获取文件 request.FILES 2.check ...

  3. 03 Django之视图函数

    一.Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python函数(类),它接受WEB请求并返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误, ...

  4. django的视图函数

    一.视图函数view 视图函数是接收一个请求(request对象),并返回响应的函数 1. HttpResponse响应请求 这个方法是返回字符串一类的,可以识别标签 2. render响应请求 re ...

  5. Django restframe 视图函数以及ModelSerializer的使用

    建立model数据库 from django.db import models __all__ = ['Book', 'Publisher', 'Author'] # Create your mode ...

  6. Django的视图函数和路由系统中一些没有用过的小点

    1.request对象 print("返回用户访问的url,但是不包括域名",request.path_info) print("返回请求的方法,全大写",re ...

  7. django views视图函数

    Django views.py视图文件 一. 创建views.py文件,在工程文件夹根目录创建views.py视图文件,其实任意文件名都可以,使用views是为了遵循传统. 注:所有的views函数都 ...

  8. Django中非视图函数获取用户对象

    今天遇到了一个问题:在Django中怎么从非视图函数中获取用户对象?怎么保证不同的请求获取到不同的用户对象? 平常我们获取用户对象使用的是: request.user 不得不说,这确实很方便. 但是, ...

  9. django中视图函数的FBV和CBV

    1.什么是FBV和CBV FBV是指视图函数以普通函数的形式:CBV是指视图函数以类的方式. 2.普通FBV形式 def index(request): return HttpResponse('in ...

随机推荐

  1. PHP7运行环境搭建(Windows7)

    注:本文来源于<    PHP7运行环境搭建(Windows7)   > php7号称能直追facebook的HHVM,为了体验一把传说中的高性能,我特意在本地电脑上尝试着安装了php7, ...

  2. MybatisPlus使用介绍

    创建UserController测试类 package com.cppdy.controller; import org.apache.ibatis.session.RowBounds; import ...

  3. (不断更新)关于显著性检测的调研-Salient Object Detection: A Survey

    <Salient Object Detection: A Survey>作者:Ali Borji.Ming-Ming Cheng.Huaizu Jiang and Jia Li 基本按照文 ...

  4. Python基础之常用模块

    一.time模块 1.时间表达形式: 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的时间字符串: 1.1.时间戳(timestamp) :通常来说,时间 ...

  5. MySql在windows上的安装

    知乎安装教程 csdn安装教程 一.官网下载 ZIP Archive 内的软件包,mysql-xxx-win64.zip. 二.新建 MySQL 文件夹,解压缩下载包,进入文件夹(mysql-8.0. ...

  6. PDF编辑方法,PDF怎么去除背景

    PDF文件现在是使用的频率很高的一个软件的格式,PDF文件能够更加直观清楚的表达,PDF文件的使用很方便但编辑起来就来没有那么容易了,PDF文件的编辑是需要借助软件的,今天小编就来跟大家分享一下PDF ...

  7. Jmeter 传值对比

    ${XXX}----------------------->在同一线程内可任务调用变量: vars.put(row,rowNum); ----------------------->var ...

  8. asp.net core 创建允许跨域请求的api, cors.

    配置应用方域名. 在webapi中引用cors包,在startup的Configure\ConfigServices中增加启动项配置,在api中增加EnableCors的Attribute属性.即可. ...

  9. yum安装Docker及入门使用

    一.安装 1.配置yum源 # vim /etc/yum.repos.d/docker.repo [dockerrepo] name=Docker Repository baseurl=https:/ ...

  10. nodeJS有多快

    听说nodeJS适用于高并发的场景,一直想测试但是没找到机会 这几天新系统要上线了,老系统的数据需要割接到新的系统中 由于数据量很大,表的结构的发生了很大的改变,割接时间长达9个小时 其中一个模块有1 ...