Python-Django-视图

《 Django 框架》课程第 1 次教学 - 视图高级

一、内置错误视图

1 、视图

一个视图函数,简称视图,是一个简单的Python函数,它接受Web请求并且返回Web响应。代码写在哪里也无所
谓,只要它在你的应用目录下面。但是为了方便视图一般被定义在“应用/views.py”文件中。

视图的第一个参数必须为HttpRequest实例,还可能包含下参数如:

通过正则表达式组获得参数

视图必须返回一个HttpResponse对象或子对象作为响应。

2 、错误视图

Django内置处理HTTP错误的视图,主要错误及视图包括

404 错误:pagenotfound视图
500 错误:server error视图
400 错误:bad request视图
403 错误:permission_denied视图

如果想要看到错误视图,而不是错误调试信息的需要设置setting.py配置文件的调试开关设置为False:

ALLOWED_HOSTS允许所有主机访问。

DEBUG = False ALLOWED_HOSTS = ["*",]

404 错误及视图

将请求地址进行url匹配后,没有找到匹配的正则表达式,则调用 404 视图,这个视图会调用 404 .html的模板
进行渲染
404 视图默认情况下定义在'django.views.defaults.page_not_found'
django自带 404 模板
视图传递变量request_path给模板,是导致错误的URL

自定义错误模板:在项目的templates目录下创建一个名字叫 404 .html的模板文件:当发生 404 错误时, 404
视图会调用templates中的模板文件而不再调用自带的模板。
在这里插入图片描述

其他错误处理方式相同。

3 、自定义错误视图

Django中默认的错误视图对于大多数web应用已经足够了,但是如果你需要任何自定义行为,只要在你的URLconf
中指定下面的处理器(在其他任何地方设置它们不会有效)。

在应用下的urls.py中自定义错误视图。 handler 404 覆盖了page_not_found()视图:

404 自定义错误视图

	def my_page_not_found_view(request): 
		'''404错误视图''' 
		return HttpResponse('请求不存在')

访问错误url
在这里插入图片描述

其他错误视图跟 404 错误一样。 handler 500 覆盖了server_error()视图:

handler 500 ='mysite.views.my_custom_error_view'

handler 403 覆盖了permission_denied()视图:

handler403 = 'mysite.views.my_custom_permission_denied_view'

handler 400 覆盖了bad_request()视图:

handler400 = 'mysite.views.my_custom_bad_request_view'

4 、模型类 get 方法错误处理

在讲模型的get方法的时候讲到过,使用get方法如果数据不存在会抛出一个DoesNotExist的异常.比如用户访问
博客的详细页请求传过来一个id据库中不存在,那么用户就会看到报错页面。

get_object_or_ 404 的介绍: 我们原来调用django 的get方法,如果查询的对象不存在的话,会抛出一个
DoesNotExist的异常。现在我们调用djangoget_object_or_ 404 方法,它会默认的调用django的get方法,如果
查询的对象不存在的话,会抛出一个Http 404 的异常,返回 404 错误页面。这样用户就不会觉得是服务器异常。而
是自己访问的路径不对。

from django.shortcuts import get_object_or_404
 def detail(request, id):
  # post = Post.post_object.get(pk=id)
   post = get_object_or_404(Post,pk=id) # 调用get_object_or_404方法,如果没有错误返回结果 
   return render(request, 'personal_blog/detail.html', context={"post": post})

get_object_or_ 404 第一个参数是需要查询的模型类, 第二个参数是 查询条件。

二、HttpRequest 对象

1 、 HttpRequest

服务器接收到http协议的请求后,Django会建立一个包含请求元数据的HttpRequest对象,这个对象不需要
我们创建,直接使用服务器构造好的对象使用就可以

2 、属性

scheme: 一个字符串,表示请求的方案(通常是http 或https)。

body: 一个字节字符串,表示原始HTTP 请求的正文。

path: 一个字符串,表示请求的页面的完整路径,不包含域名

method:一个字符串,表示请求使用的HTTP 方法。常用值包括:'GET'、'POST'

encoding:一个字符串,表示提交的数据的编码方式(如果为None 则表示使用DEFAULT_CHARSET 设置,一般 为utf-8)。这个属性是可写的,你可以修改它来修改访问表单数据使用的编码。接下来对属性的任何访问(例如从 GET 或 POST 中读取数据)将使用新的encoding 值 

GET: 一个类似于字典的对象,包含HTTP GET 的所有参数 POST: 一个包含所有给定的HTTP POST参数的类字典对象,提供了包含表单数据的请求。 

COOKIES:一个标准的Python 字典,包含所有的cookie。键和值都为字符串。

 FILES: 一个类似于字典的对象,包含所有的上传文件。FILES 中的每个键为 中的name。 session:一个既可读又可写的类似于字典的对象,表示当前的会话。只有当Django 启用会话的支持时才可用。

 META:一个标准的Python 字典,包含所有的HTTP 头部。 
 
CONTENT_LENGTH —— 请求的正文的长度(是一个字符串)。 

CONTENT_TYPE —— 请求的正文的MIME 类型。 

HTTP_ACCEPT —— 响应可接收的Content-Type。 

HTTP_ACCEPT_ENCODING —— 响应可接收的编码。 

HTTP_ACCEPT_LANGUAGE —— 响应可接收的语言。

 HTTP_HOST —— 客服端发送的HTTP Host 头部。 HTTP_REFERER —— Referring 页面。 

HTTP_USER_AGENT —— 客户端的user-agent 字符串。 

QUERY_STRING —— 单个字符串形式的查询字符串(未解析过的形式)。 

REMOTE_ADDR —— 客户端的IP 地址。 REMOTE_HOST —— 客户端的主机名。 REMOTE_USER —— 服务器认证后的用户。 

REQUEST_METHOD —— 一个字符串,例如"GET" 或"POST"。 

SERVER_NAME —— 服务器的主机名。 SERVER_PORT —— 服务器的端口(是一个字符串)。

在浏览器中开发者工具->网络 中可以看到请求信息:
在这里插入图片描述
示例:scheme,path,encoding:

def info(request): 
# HttpRequest对象属性
 str = '请求的方案:%s</br>路径:%s</br>编码%s'(request.scheme,request.path,request.encoding) 
 return HttpResponse(str)

在这里插入图片描述
method 表示请求使用的HTTP方式创建三个视图:

def method1(request): 
	return render(request,'personal_blog/method1.html')
 def method2(request): 
 	return HttpResponse(request.method) # 返回请求方式 
 def method3(request): 
 	return HttpResponse(request.method) # 返回请求方式

配置URL:

url(r'^method1/$', views.method1), 
url(r'^method2/$', views.method2), 
url(r'^method3/$', views.method3),

创建模板:method1.html 写入下面内容:

<!DOCTYPE html> 
<html lang="en">
 <head>
 <meta charset="UTF-8"> 
 <title>Title</title>
  </head> 
  <body> <a href="/blog/method2/">方式一:get</a>
  </br> </br>
   </br> <form method="post&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python-Django-Vue项目实战是一种常见的全栈发模式,结合了Python的Django框架和Vue.js前端框架。下面是一个简单的介绍: Python-Django是一个强大的Web开发框架,它使用Python语言编写,提供了一系列的工具和库来简化Web应用程序的开发过程。Django具有高度的可扩展性和灵活性,可以帮助开发者快速构建功能丰富的Web应用。 Vue.js是一个流行的JavaScript前端框架,它专注于构建用户界面。Vue.js具有简单易学的语法和强大的功能,可以帮助开发者构建交互性强、响应迅速的前端应用。 在Python-Django-Vue项目实战中,通常会将Django作为后端框架来处理数据逻辑和业务逻辑,而Vue.js则负责前端页面的展示和用户交互。通过这种方式,可以实现前后端分离,提高开发效率和代码可维护性。 具体的项目实战可以包括以下内容: 1. 构建Django后端:使用Django框架创建后端应用程序,包括定义数据模型、编写视图函数、配置URL路由等。 2. 开发Vue前端:使用Vue.js框架创建前端应用程序,包括设计页面布局、编写组件、处理用户交互等。 3. 数据交互:通过RESTful API或GraphQL等方式,实现前后端数据的交互和通信。 4. 用户认证和权限管理:实现用户注册、登录、权限验证等功能,确保系统的安全性。 5. 数据库操作:使用Django的ORM(对象关系映射)来进行数据库操作,包括增删改查等。 6. 页面美化和响应式设计:使用CSS和Vue.js的样式绑定功能,实现页面的美化和响应式设计。 7. 部署和发布:将项目部署到服务器上,并进行性能优化和安全加固。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丶清子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值