views.py视图函数来自 urls 的映射关系

常用所需模块

from django.shortcuts import render               # ****** 渲染 render 跳转到指定的 url.html,并且将数据 也可以 传给前端页面 {"data": DB}  DB 为后台取到的数据
from django.shortcuts import HttpResponse # 响应一个字符串; HttpResponse 返回一个字符串 “OK”
from django.shortcuts import redirect # redirect 重定向 依照 get 形式请求 一个url

在views.py中拼接路径

from CMS import settings
import os # 从项目路径导入 settings 配置文件,引用其中的BASE_DIR变量,使用join拼接具体路径
html_path=os.path.join(settings.BASE_DIR,"templates","index.html")

视图函数请求对象HttpRequest对象

属性:

path:       请求页面的全路径,不包括域名

method:     请求中使用的HTTP方法的字符串表示。全大写表示。例如

               if request.method=="POST":
# 如果为POST获取传来的数据
title=request.POST.get("title")
pubdate=request.POST.get("pubdate") # 否则直接返回一个渲染的页面
return render(request,"add.html") GET: 包含所有HTTP GET参数的类字典对象 POST: 包含所有HTTP POST参数的类字典对象 COOKIES: 包含所有cookies的标准Python字典对象;keys和values都是字符串。 FILES: 包含所有上传文件的类字典对象;FILES中的每一个Key都是<input type="file" name="" />标签中
name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys: filename: 上传文件名,用字符串表示
content_type: 上传文件的Content Type
content: 上传文件的原始内容 user: 是一个django.contrib.auth.models.User对象,代表当前登陆的用户。如果访问用户当前
没有登陆,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你
可以通过user的is_authenticated()方法来辨别用户是否登陆:
if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware
时该属性才可用 session: 唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用。

例:

1.如果使用POST方式请求获取,请求的路径

def add(request):
if request.method=="POST":
print(request.path)

注意:

2.键值对的值是多个的时候,比如checkbox类型的input标签,select标签,需要用getlist:

def add(request):
if request.method=="POST":
hobby=request.POST.getlist("hobby")

输出:

hobby ["111","222"]

常用的操作

    # request.method     # 获取用户的请求方式:如果通过get请求就获取"GET",如果是post请求就获取"POST"
# 如果是依照get方式请求,返回给页面使用 render 渲染 # render 渲染
# redirect 重定向
# HttpResponse http响应

常用的相应用户的请求:

    # return render(request,"login.html")               # ****** 渲染 render 跳转到指定的 url.html
# return render(request,"index.html",{"data": DB}) # ****** 渲染 并且将数据 也可以 传给前端页面 {"data": DB} DB 为后台取到的数据,data为页面中的 模板调用值 {{ data }}
# return redirect("http://www.baidu.com") # redirect 重定向 依照 get 形式请求 一个url
# return redirect("/index/") # 重定向 urls.py 里指定的 url
# return HttpResponse("OK") # 响应一个字符串; HttpResponse 返回一个字符串 “OK”

解决 硬编码

1.在返回用户请求时redirect重定向一个内部地址时,达到解决 硬编码 的问题:

在Urls.py中配置name="LOGIN":

from django.conf.urls import url,include
from django.contrib import admin
from app01 import views as app01_views urlpatterns = [
url(r'^admin/', admin.site.urls), # 用户请求url http://127.0.0.1/login.html; 即使在这里将 ^login.html/ 改为 ^loginssss.html/ 对模板处的引用也不会有问题
# 使用别名的方式 解耦 url 的变更请求;name = "LOGIN" 在模板中 引用使用 {% url 'LOGIN' %} 代替这个路径
url(r'^login.html/', app01_views.login, name="LOGIN")
]

2.在views.py中通过redirect重定向一个地址时:

from django.shortcuts import render, HttpResponse,redirect

# 需要模块 reverse
from django.urls import reverse def login(request):
if request.method == "POST":
user = request.POST.get("user")
pwd = request.POST.get("pwd") # 给用户返回重定向 redirect(reverse('别名')) 实现解耦 url 变更
return redirect(reverse('LOGIN')) # render(request, "login.html") 表示返回 templates/ 实际的 页面名称
return render(request, "login.html")

3.在templates模板语言中的action="{% url 'LOGIN' %}" 获取render渲染来的urls.py实际请求地址:

<body>
{# 通过render渲染时 将urls.py定义的别名 name="LOGIN" 转换为实际的 请求路径地址 loginssss.html #}
{# 格式 action="{% url '别名' %}";url为关键字 '别名' 为在视图函数中定义的name值 #}
<form action="{% url 'LOGIN' %}" method="post"> <p>姓名 <input type="text" name="user"></p>
<p>密码 <input type="password" name="pwd"></p>
<input type="submit">
</form>
</body>

render渲染

模拟数据源:

DB = [
{"hostname":"c1.com","port":80},
{"hostname":"c2.com","port":81},
{"hostname":"c3.com","port":82},
{"hostname":"c4.com","port":83},
{"hostname":"c5.com","port":84},
] age=18

格式:return render(request, template_name,{"data": DB,"age":age})

参数:
request: 用于生成响应的请求对象。
template_name:要使用的模板的完整名称,可选的参数
{"data": DB}:添加到模板上下文的一个字典。默认可以为空。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。
# 在传多个值时,可以直接使用 locals():return render(request, template_name, locals()) 将次 函数中所有 调用方式传入模板中; 渲染 并且将数据 也可以 传给前端页面 {"data": DB} DB 为后台取到的数据,data为页面中的 模板调用值 {{ data }}

redirect重定向

格式:return redirect("http://www.baidu.com")或 return redirect("/index/")

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

示例:

一个视图函数至少包含:

  1. index函数至少有一个 参数 (request)请求
  2. request 封装了用户请求的相关信息 (get post)

视图函数的案例:

1.URL为index的函数:

def index(request):
print(request.GET) # 可以获取 客户端通过 url 地址栏传入的数据 http://127.0.0.1:8000/index/?v1=123&v2=456
# 打印数据 <QueryDict: {'v1': ['123'], 'v2': ['456']}>
if request.method == "GET":
return render(request,"index.html",{"data": DB}) # 直接将页面跳转给 index.html 并将数据传过去 {"data": DB} elif request.method == "POST": # 当请求方式为 POST 表单提交时
host = request.POST.get("host") # 可以获取提交过来的数据,host 为提交 表单input的name值
port = request.POST.get("port")
if host and port: # 判断模板提交的数据是否有值
temp = {"hostname":host,"port":port}
DB.append(temp)
return render(request, "index.html", {"data": DB})
return redirect("/index/") # 如果提交数据为空直接通过 redirect 重定向到 index/

2.URL为login的函数:

def login(request):
if request.method == "GET":
return render(request,"login.html")
elif request.method == "POST":
# 获取用户提交的数据默认用户提交依照字典形式提交到后台 {'user': ['zhangsan'], 'pwd': ['pwd123']}
print(request.POST)
username = request.POST.get("user")
passwrod = request.POST.get("pwd")
if username == "root" and passwrod == "123":
return redirect("/index/") # 验证通过后,重定向将url指向 /index/
else:
return redirect("/login/")

views.py视图函的更多相关文章

  1. Django之views.py视图函数学习

    视图函数: 视图函数时存在django项目中的应用程的一个名为views.py的文件模块: 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 一 ...

  2. django views.py视图 获取用户请求相关信息以及请求头

    请求的其他信息 用户发来请求时候,不仅发来数据,也把请求头也发过来 在views.py 怎么找请求数据? request是一个对象,这个对象封装很多信息,可以先查这个对象的类 print(type(r ...

  3. Django Views(视图函数)

    http请求中产生两个核心对象: http请求:HttpRequest对象 http响应:HttpResponse对象 所在位置:django.http 之前我们用到的参数request就是HttpR ...

  4. django之 使用views.py里面的函数对表进行增删改查 内容(models.py中表的创建、views.py中函数的使用,基于对象的跨表查询)

    models之对于表的创建有以下几种: 一对一:ForeignKey("Author",unique=True),  OneToOneField("Author" ...

  5. 第三百零四节,Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器

    Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器 这一节主讲url控制器 一.urls.py模块 这个模块是配置路由映射的模块,当用户访问一个 ...

  6. 二 Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器

    Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器 这一节主讲url控制器 一.urls.py模块 这个模块是配置路由映射的模块,当用户访问一个 ...

  7. Python之Django之views中视图代码重复查询的优化

    Django框架中views视图中如果多个函数都有同样的查询语句,例如: allcategory = Category.objects.all() remen = Article.objects.fi ...

  8. Django中使用Bootstrap----带view.py视图函数(也就是项目下的脚本文件)

    一.Django中使用Bootstrap 1.首先建立工程,建立工程请参照:https://www.cnblogs.com/effortsing/p/10394511.html 2.在Firstdja ...

  9. django-3-视图(views.py)与网址(urls.py)

    视图与网址 操作文件:urls.py.views.py urls.py 作用:用于处理前台的链接(如前台访问:127.0.0.1:8080/index/1212/21212),其实永远访问的是同一个文 ...

随机推荐

  1. Linker Scripts3--简单的链接脚本命令2-Assigning Values to Symbols

    1.前言 本章继续讲述简单脚本命令的后半部分 2.Assigning Values to Symbols 你可以给一个符号(symbol)赋值,它会把这些定义的符号放入全局符号表(symbols ta ...

  2. LwIP Application Developers Manual9---LwIP and multithreading

    1.前言 lwIP的内核并不是线程安全的.如果我们必须在多线程环境里使用lwIP,那么我们必须使用“upper”API层的函数(netconn或sockets).当使用raw API时,你需要自己保护 ...

  3. NAND Flash底层原理,SLC MLC TLC比较【转】

    转自:https://blog.csdn.net/qq_39560607/article/details/81714145 版权声明:请注明转载自Christa_RJ https://blog.csd ...

  4. zookeeper3.4.6配置实现自动清理日志【转】

    在使用zookeeper过程中,我们知道,会有dataDir和dataLogDir两个目录,分别用于snapshot和事务日志的输出(默认情况下只有dataDir目录,snapshot和事务日志都保存 ...

  5. mac使用pytesseract

    import locale locale.setlocale(locale.LC_ALL, 'C') import pytesseract import pathlib import tracebac ...

  6. MongoVUE 使用教程

    MongoVUE是一款针对MongoDB的客户端工具,现在连接数据库也叫数据模式有2种方法,一种是B/S结构的数据库,通过网页就可以访问.另外一种就是基于C/S客户端的连接方式,本次为大家分享的这一个 ...

  7. centos6.8上PHP5.3升级到PHP5.4及更高版本方法

    执行命令下载.安装yum源,当前是针对Centos6并且64位版本的源: [root@T_249 yum.repos.d]# rpm -ivh http://dl.fedoraproject.org/ ...

  8. URLConnection和HttpURLConnection

    URLConnection和HttpURLConnection使用的都是java.net中的类,属于标准的java接口. HttpURLConnection继承自URLConnection,差别在与H ...

  9. UVA 1395 MST

    给你一个图, 求一个生成树, 边权Max – Min 要最小,输出最小值, 不能构成生成树的 输出 -1: 思路: Keuksal 算法, 先排序边, 然后枚举 第一条边, 往后加入边, 直到有 n- ...

  10. Hystrix系列-5-Hystrix的资源隔离策略

    转自:https://blog.csdn.net/liuchuanhong1/article/details/73718794 Hystrix的资源隔离策略有两种,分别为:线程池和信号量. 说到资源隔 ...