Django学习Day2——视图和路由(一)

Django中的视图和路由

Django中视图的概念在上一篇博客中已经介绍过,是网站后端用于逻辑处理的模块;路由的话可以理解为,将视图函数和URI进行映射,这样将来每一个URL就会对应一个特定的视图函数,我们访问这一URL,实质上就是调用其对应的视图函数。

关于URL和URI的区别:

URL(Uniform Resource Locator):统一资源定位器,是一个访问地址,标记了一个互联网资源(用地址标记),通过URL可以获取到这一互联网资源。例如:http://127.0.0.1:8080/admin/就是一个URL,通过这一URL我们可以访问到后台管理系统。

URI(Uniform Resource Identifier):统一资源标识符,标记了一个网络资源而已,URI强调的是给资源标记命名,通过URI无法访问到这一互联网资源,因为缺少地址信息。例如在 http://127.0.0.1:8080/admin/中,admin/就是URI。

综上,URL和URI之间的关系是:

URI是构成URL的一部分,URL = 访问协议(http)+ 域名(或者说地址,127.0.0.1:8080)+  URI(admin/)

路由和视图的基本使用

下面结合具体的代码,进行路由和视图基本使用部分的介绍:

(1)首先创建我们的Django项目two,以及在项目下创建应用app

Django学习Day2——视图和路由(一)_第1张图片

执行上述命令之后,我们可以得到如下的目录结构:

Django学习Day2——视图和路由(一)_第2张图片

(2)对于Django项目,需要进行一些常规的默认的操作

         在项目中进行相关的配置(在项目根目录下的settings.py中进行)注册应用

Django学习Day2——视图和路由(一)_第3张图片

(3)在应用app中实现视图函数

这一过程在views.py中完成,这里实现一个最基础的功能,返回“hello world”。

Django学习Day2——视图和路由(一)_第4张图片

上面的三个操作可以理解为准备工作,接下来的第四步和第五步是实现路由和视图绑定的关键。

(4)在应用app中,实现视图函数和应用录由的绑定

  • 在应用app文件夹下,创建路由文件urls.py,编写如下代码,实现应用内部视图函数和路由的绑定

Django学习Day2——视图和路由(一)_第5张图片

(5)在项目根目录下,实现根路由和应用录由的绑定

  • 在项目文件夹two下的urls.py文件中,将应用中的路由集成到根路由,编写代码如下:

Django学习Day2——视图和路由(一)_第6张图片

(6)之后,我们启动服务,就可以在浏览器中进行查看:

  • 启动服务的命令如下:

Django学习Day2——视图和路由(一)_第7张图片

  • 浏览器中访问,得到如下输出:

Django学习Day2——视图和路由(一)_第8张图片

URL中的参数(变量)设置

在URL中,有时需要传入一些参数进去,在Django中有两种传参的方式,下面一一介绍:

1. uri后边用 ?号进行传参

这种传参方式的具体做法是:在URI后面使用?号连接,然后键与值之间使用等号连接的方式进行传参,多个参数之间使用&进行连接。例如:http://127.0.0.1:8080/admin?name=django&age=24。然后传入的参数在视图函数中,使用request GET方法进行获取。下面结合代码进行具体的说明。

(1)编辑视图函数,重写app下的view.py。

Django学习Day2——视图和路由(一)_第9张图片

(2)启动服务,浏览器中进行访问:

  • 当没有传入参数的时候,默认为None

Django学习Day2——视图和路由(一)_第10张图片

  • 有参数进行传入时,显示传入的参数

Django学习Day2——视图和路由(一)_第11张图片

2. 使用分隔符 / 的方式进行传参

这种传参方式的具体做法是:在URL后面使用 / 分隔开多个传入参数。例如:http://127.0.0.1:8080/admin/django/24。然后传入的参数在应用下的路由文件urls.py中进行匹配,在视图函数中,直接根据参数名称进行获取即可。下面结合代码进行具体的说明。

(1)编辑视图函数,重写app下的view.py。

Django学习Day2——视图和路由(一)_第12张图片

(2)编辑路由文件,重写app下的urls.py文件

在urls.py文件中,需要对URL中的参数进行匹配,匹配的规则在此处进行定义,其中匹配的时候,有如下四种匹配项:

  • 字符串类型:匹配任何非空字符串,但不包含斜杠,在不指定类型的前提下,默认字符串类型 <str:name>
  • 整型:匹配0和正整数 <int:age>
  • slug:   可理解为注释,后缀或附属等概念
  • uuid:匹配一个uuid格式的对象 <uuid: uid> 类似xxx-xx-xx

Django学习Day2——视图和路由(一)_第13张图片

(3)启动服务,浏览器中进行访问

Django学习Day2——视图和路由(一)_第14张图片

第二种传参数的方式中,必须传入对应的、相匹配的参数,如果不填、少填或者参数的类型不对应的话,均会报错:

如下所示:

Django学习Day2——视图和路由(一)_第15张图片Django学习Day2——视图和路由(一)_第16张图片Django学习Day2——视图和路由(一)_第17张图片

视图的详细讲解

视图部分我们可以分为三个关键环节:

  • 用户的请求 request
  • 对用户请求的逻辑处理 handler
  • 将处理后的数据返回给用户 response

用户的请求对象request

浏览器向服务器发送的请求对象,包含用户信息,请求内容和请求方法等,使用dir(request)可以查看request对象的所有方法。下面列举一些常见的request对象的方法:

  • request.GET  ->  获取url上?形式传递的参数
  • request.POST  ->  获取post提交的数据
  • request.FILES  ->  获取请求的文件类型数据
  • request.path  ->  请求的路径,比如请求127.0.0.1/test/1,那这个值就是/test/1
  • request.method  ->  请求的方法 get or post
  • request.COOKIES  ->  请求过来的cookies
  • request.user  ->  请求的用户对象,可以通过它判断用户是否登录,并获取用户信息
  • request.session  ->  个既可读又可写的类似于字典的对象,表示当前的会话
  • request.META  ->  一个标准的Python 字典,包含所有的HTTP 首部。具体的头部信息取决于客户端和服务器(有很多信息)

常用的返回对象

服务器端收到浏览器的请求之后,会返回一些内容到浏览器,常见的返回对象有:

  • HttpResponse 可以直接返回一些字符串内容
  • render 将数据在模版中渲染并显示
  • JsonResponse 返回一个json类型,通常用于与前端进行ajax交互

上面几种返回对象的声明方式如下:

  • from django.http import HttpResponse
  • from django.shortcuts import render
  • from django.http import JsonResponse

视图面向对象的写法

上面的示例中,我们使用的是面向函数的写法,即视图函数(views.py文件)中直接定义了相应的函数,我们也可以使用面向对象的写法。具体的做法如下:

(1)在视图函数中,定义类(views.py文件)

Django学习Day2——视图和路由(一)_第18张图片

(2)在应用路由中,通过类的方式进行视图和应用路由的绑定(urls.py文件)

Django学习Day2——视图和路由(一)_第19张图片

(3)启动服务,浏览器中访问如下:

Django学习Day2——视图和路由(一)_第20张图片

注意,如果视图是面向对象的写法,则类中的函数名称必须为get,否则会报如下错误:

Django学习Day2——视图和路由(一)_第21张图片

报错信息 HTTP ERROR 405,一般是HTTP使用的method类型不对导致的,浏览器访问网站是GET请求,因此类中的函数名称应写为get。

扩展知识—RESTful规范和HTTP协议

RESTful规范

RESTful规范是一种网络架构风格,它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。但是是否遵循该规范以及如何遵循该规范需要根据具体的业务需求来决定。概括而言,RESTful规范是开发者在网站开发过程中建议被遵循的一个准则。

RESTful规范常用方法如下:

  • Get 获取资源时使用,比如我们查看一个网页
  • Post 提交资源时使用,比如我们注册一个用户的时候
  • Put 修改资源时时候,比如我们修改自己的用户信息的时候
  • Delete 删除资源时使用,比如我们注销我们的账号的时候

HTTP协议

网上应用最为广泛的一种网络协议。所有www文件都必须遵守这个标准。

HTTP协议是无状态的,无状态是指:当浏览器发送请求给服务器的时候,服务器响应客户端请求,但是当同一个浏览器再次给你服务器发送请求的时候,服务器并不知道它就是刚才那个浏览器。简单的说,服务器不会记得你,所以就是无状态协议。

HTTP常用的状态码如下:

  • 200 成功
  • 400 请求错误,一般是参数格式有误的时候出现
  • 403 禁止访问
  • 404 没有获取到url地址
  • 405 方法禁用,比如这个地址指定用get方法,但你用了post,就会有这个提示
  • 500 服务器异常

参考资料

1、https://www.cnblogs.com/ddzc/p/12119121.html

2、https://coding.imooc.com/class/393.html

 

你可能感兴趣的:(Django开发框架,django,python)