前军教程网

中小站长与DIV+CSS网页布局开发技术人员的首选CSS学习平台

Django从入门到精通系列-视图模板01

Django 是一个实现了 MVT 处理模式的、功能全面而强大的、主要应用于企业级 web 项目开发的 web 框架。

M:Model 数据模型

V:View 视图

T:Template 模板

MVT 是在 MVC 处理模式的基础上衍生出来的一种处理模式,将控制器 C 部分封装并提供了 路由配置,通过 MV 之间的路由映射关系完成复杂的功能,通过重用模板 T 来达到视图的复 用以提高开发效率的操作过程。

视图操作

视图作为软件和用户最直接交互的一部分,其界面的重要性以及操作功能的完整性需要非常高的保障,一个完善的视图操作可以给用户带来一份非常愉悦的使用体验!

视图处理函数

通常情况下的视图操作,主要由 Django 项目中的视图模块 views.py 进行处理,针对用户的URL请求定义不同的处理函数进行处理,在处理函数中就可以返回对应的视图View。


下面是一个最原始的视图处理方式,编辑 mysite/views/views.py

# 需要HttpResponse对象返回普通视图页面
from django.http import HttpResponse

# 定义视图处理函数
def view1(request):
# 返回一个字符串展示的视图,会在浏览器网页中打印展示给用户
# 如果有参数,则可以使用字符串拼接的方式完成
msg = "刘建宏真帅"
return HttpResponse("<h1>使用普通字符串传递页面%s</h1>" %msg)

定义好视图处理函数之后,就可以在模块路由中添加视图函数和 URL 地址的映射关系了 修改 mysite/views/urls.py 如下:

from django.conf.urls import url


from . import views

urlpatterns = [

url(r"^view1#34;,views.view1,name="view1"),

]

在根模块的主路由配置文件中,注册添加 views模块应用中的子路由配置 修改 mysite/mysite/urls.py 如下:

# 导入视图文件

from . import views


urlpatterns = [

url(r'^admin/', admin.site.urls),

url(r'^blog/',include("blog.urls")),

url(r'^views/',include("views.urls")),

url(r"^.*#34;,views.index,name="index"),

]

通过路由和处理函数的结合,就完成了一个完整的视图模块的定义。

测试代码:

那么请思考下面的问题!!!

路由到底是什么东西?

它起到了什么作用?

视图函数到底是一个什么样的函数?

路由就是一个 url 请求分发器,根据具体的配置信息,将 web 服务器接收到的 url 请求关联并调用执行指定的函数(视图函数),这样的一个操作过程称为路由


路由的核心作用就是关联URL地址和视图处理函数之间的映射关系!

路由的配置在 Django 项目中,主要是通过应用下面的 urls.py 文件进行配置,所有的路由信息会 包含在一个变量名称为 urlpatterns 的列表中,每个独立的路由都是通过 url()来进行设置操作 的,url()有三个参数,如下:

url(r"^#34;, views.index, name="index")

参数1:一个正则表达式,用来匹配 url 请求路径,不包含项目路径和参数,不包含前分隔符/

参数2:一个指定的视图函数,主要在参数 1匹配成功时调用执行

参数3:给当前路由的一个字符串名称


视图处理函数就是定义在视图模块 views.py中的普通函数,函数的参数request表示一个 请求对象,包含了浏览器发送的请求中的所有信息

响应视图的处理

我们也知道,一般视图都是HTML页面在充当,如果要返回HTML页面,我们还使用上面的字符串去写,这样无形之中增加了很大的开发成本,所以Django也为大家提供了如下几种视图相应处理方式。

? 普通响应视图 (了解)

? 响应网页视图 (了解)

? 返回网页视图快捷操作方式 (重要,掌握)

普通响应视图

返回一个简单的字符串渲染网页:

# 需要HttpResponse对象返回普通视图页面

from django.http import HttpResponse


# 定义视图处理函数

def view1(request):

# 返回一个字符串展示的视图,会在浏览器网页中打印展示给用户

# 如果有参数,则可以使用字符串拼接的方式完成

msg = "刘建宏真帅"

return HttpResponse("<h1>使用普通字符串传递页面%s</h1>" %msg)

响应网页视图

在 views/模块应用下创建目录 templates/(固定的,以后都是这个名字)。

在 templates 目录中创建二级目录 views/(一定要创建,路径隔离),在其中创建网页 index.html。

目录结构如:mysite/views/templates/views/index.html,编辑内容:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>视图首页</title>
</head>
<body>
<h1>这个是通过loader加载的首页!!</h1>

<h2>{{msg}}</h2>
</body>
</html>

接下来在视图处理函数中,我们重新定义返回视图:

# 导入一个解析模板的loader对象

from django.template import loader

def view2(request):

# 使用loader加载页面,注意路径问题,

# loader会自动去templates文件夹下查询页面

temp = loader.get_template("views/index.html")

context = {"msg": "刘建宏是个大帅锅"} # 上下文参数

return HttpResponse(temp.render(context,request))

此时我们通过http://127.0.0.1:8000/views/view2 再次访问服务器就会得到一个开发的网页视图:

网页视图快捷操作方式

通过响应对象渲染返回的网页,功能非常强大,但是编码略显复杂。 Django 框架作为一个功能强大的 web 框架,不会让开发人员做大量重复的工作,所以已经将 HTML 网页的渲染返回进行了快捷的处理,方便了开发人员的使用。

改造上述视图处理函数如下:

# 引入需要的render对象

from django.shortcuts import render


def view3(request):

# render函数可以将视图快速返回

return render(request,"views/list.html",{"msg": "刘建宏就是我的欧巴~~~"})

创建list.html,运行代码:

Django的视图返回就是这么简单,我们需要大家对简单字符串返回和loader加载会简单使用即可,但是shortcuts快捷方式必须掌握和熟练使用。

RESTful 参数处理

我们都知道,视图是展示数据的,但是在真正的项目中,我们一般展示数据的同时,也会由页面传递数据到服务器,如:注册、登录等。

当前的技术,进行数据传输到服务器的主要有两种方式,一种是传统的get或者post协议中携带数据,一种就是最近比较流行的RESTful方式,RESTful参数处理,就是通过将参数包含在 URL 地址中 作为地址的一部分出现,在一定程度上能有非常好的参数混淆的作用,对于网站安全性的提升是非常友好的一种操作,两种比较如下:

get 方式发送参数:发送的参数名称为 wd,参数的值为 刘建宏

http://www.baidu.com?wd=刘建宏


RESTful 风格发送参数: http://www.baidu.com /liujianhong/wd

Django也实现了RESTful 风格发送参数是将参数包含在 url 地址中,所以参数的接收定义就会在路由中进行配置,参数的配置接收主要有两种方式如下,我们推荐第二种方式:

? 第一种方式:位置参数 ?

? 第二种方式:关键字参数

两种方式的配置代码如下,在url.py中配置,在视图处理函数中获取参数:

# 利用正则的分组,第一个括号表示第一个参数

url(r"^(\w+)/param1#34;,views.param1,name="param1"),

# 使用命名参数

url(r"^(?P<username>\d+)/param2#34;,views.param2,name="param2"),

视图函数如下:

# url(r"^(\w+)/param1",views.param1,name="param1"),

# 第一个参数就是正则分组的参数

def param1(request,name):

print("前端传输的name:", name)

return HttpResponse("这个是使用位置参数方式")


# 这个是使用命名参数

# url(r"^(?P<username>\d+)/param2",views.param2,name="param2"),

def param2(request,username):

print("前端传输的username:", username)

return HttpResponse("这个是使用命名参数方式")

我们可以通过如下的方式进行访问并传递数据:

http://127.0.0.1:8000/views/liujianhong/param1

http://127.0.0.1:8000/views/123456/param2

request对象

上面介绍了 RESTful 风格的数据参数操作,但是在网页中更多的数据请求方式还是通过 get 和 post 表单请求发送进行发送的,此时我们就需要对我们发送的请求 Request 这个特殊的对象进行分析,并从中得到我们想要的数据。

Request是web开发中的请求头对象,它携带者请求者的大多数信息,这些信息有些是我们需要的。

首先在视图处理函数中,第一个参数被 Django 自动设置成了包含浏览器发送的请求数据的请求对象,对于请求对象 Request,有如下的属性值得我们思考。

? path: 一个表示完整访问路径的字符串,不包含域名,就是URI

? method:一个表示请求方式的字符串

? encoding:一个表示请求编码方式的字符串

2 如果为 None 表示使用浏览器默认 utf8 编码

? GET:一个像dict的对象,包含了 get 方式请求的所有参数数据 ?

? POST: 一个像dict的对象,包含了 post 方式请求的所有参数数据 ?

? FILES: 一个像dict的对象,包含了所有的上传的文件 ?

? COOKIES:一个字典对象,包含所有的 cookie 值 ?

? session:一个 like dict 对象,用于表示当前会话,Django 启用会话支持时可用

? 等等……

查看这些常见的request方法和属性:

def req(request):

print("request===>",request) #请求对象request

print("request===>",dir(request)) #request中的方法和属性

print("method===>",request.method) #请求的方法类型

print("GET===>",request.GET) # get请求的参数

print("POST===>",request.POST) # post请求的参数

print("FILES===>",request.FILES) # 二进制文件

print("session===>",request.session) # session对象

print("COOKIES===>",request.COOKIES) # cookie对象

print("path===>",request.path) # 路径URI

print("encoding===>",request.encoding) #编码方式,如果为None,则默认为utf-8

return HttpResponse("这个是request对象")

运行代码,控制台上输入信息:

那么我们如果要获取前端页面传递过来的数据就简单了。

def req_params(request):

if request.method == "GET":

print("get方式提交数据")

name = request.GET["name"]

pwd = request.GET["pwd"]

# 如果页面传递的是多个数据,则不能使用这种方式接受

# 而应该使用下面的getlist方法来接受

favs = request.GET["fav"]

print(name,pwd,favs)

################################################

# 也可以这样获取,第二个参数表示如果没有值默认的值

name = request.GET.get("name","默认值")

pwd = request.GET.get("pwd")

# 获取多个数据使用getlist方法

favs = request.GET.getlist("fav")

print(name,pwd,favs)


elif request.method == "POST":

name = request.POST.get("name", "默认值")

pwd = request.POST.get("pwd")

# 获取多个数据使用getlist方法

favs = request.POST.getlist("fav")

print(name, pwd, favs)


return HttpResponse("获取页面的参数")

响应对象 Response

我们刚刚学习了Request对象,这个是请求头对象,主要封装用户请求的信息,下面我们来看Response对象,这个是服务器相应客户端的相应对象。

Django 中的 Response 响应对象,主要用来进行浏览器响应数据的处理。

响应数据的处理包括两部分:响应对象本身响应返回视图操作

响应对象的属性和方法操作

属性操作

content

响应的数据内容

charset

数据编码格式

status_code

HTTP 响应状态码

content-type

指定输出内容类型

方法操作

init()

使用网页内容创建 HttpResponse 对象

write(content)

以文件的方式写入数据

flush()

以文件的方式刷新推送数据

set_cookie(k,v,m_a,e)

设置 cookie 中存储数据

k:key,变量名称

v:value,变量中存放的值

m_a:max_age,cookie 过期时间,单位秒s e:expires,过期时间 datetime 类型

测试代码如下:

def resp_params(request):

print("HttpResponse===>",HttpResponse)

print("HttpResponse===>",dir(HttpResponse))

return HttpResponse("相应头信息")

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言