侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Django框架视图介绍与使用详解

框架(架构)  /  管理员 发布于 7年前   350

本文实例讲述了Django框架视图介绍与使用。分享给大家供大家参考,具体如下:

视图

  • 视图:即一个python函数,可以叫 视图函数,或者简称 视图,定义在 应用/views.py 文件中。
  • 作用:接收并处理请求,调用M和T,响应请求(返回HttpResponse或其子类)
  • 每一个用户请求,都对应着一个视图(和url地址),由视图处理请求后,再返回html页面内容给浏览器显示。

URL配置及匹配

作用:建立url地址和视图函数的对应关系,当用户请求某个url地址时,让django能找到对应的视图函数进行处理。

配置url:

在应用下创建urls.py,然后在项目下的urls.py文件中包含进来:

# 项目下的urls.pyurlpatterns = [  ...  # 包含应用下的urls.py文件  url(正则表达式, include('应用名.urls'))]

在应用下的urls.py中,进行url请求的配置:

# 应用下的urls.pyurlpatterns = [  # 每一个url配置项都需要调用url函数,指定两个参数  # 参数1: 匹配url的正则表达式  # 参数2: 匹配成功后执行的视图函数  url(正则表达式, 视图函数名),]

案例:

通过http://127.0.0.1:8080/app01/index地址,要调用视图函数index访问首页。则可配置如下(域名和端口号不需要配置,只需要配置 app01/index 部分):

在app01应用中创建urls.py文件,在该文件中配置url和视图函数的对应关系:

# app01.pyurlpatterns = [  ...  # 进入首页  url(r'^index$', views.index),]

在项目下urls.py中,把应用下的urls.py包含进来:

# Project01/urls.pyurlpatterns = [  # 包含应用app01下的urls.py  url(r'^app01/', include('app01.urls')),]

url匹配流程

输入如下地址,访问首页:

http://127.0.0.1:8000/app01/index?aa=1&bb=xx

匹配流程:

url配置规则 (针对应用下的url配置)

正则表达式 应使用 ^ 和 $ 严格匹配请求url的开头和结尾,以便匹配唯一的字符串

url匹配小结:

  1. 域名、端口、参数不参与匹配
  2. 先到项目下的urls.py进行匹配,再到应用的urls.py匹配
  3. 自上而下的匹配
  4. 匹配成功的url部分会去掉,剩下的部分继续作匹配
  5. 匹配不成功提示404错误

视图函数

每一个请求的url地址,都对应着一个函数,叫视图函数,由视图函数处理请求后,再返回页面内容给浏览器显示。

在 应用/views.py 下,定义视图函数,示例:

from django.http import HttpResponse# 必须有一个参数requestdef index(request):  """进入首页的视图函数"""  # 处理完请求,返回字符串内容给浏览器显示  return HttpResponse("Hello Python")

捕获URL中的值

问题:对于如下的url地址,如何捕获url上的两个值(代表新闻类别和页码),并传给视图函数处理?

输入如下地址:

# /show_news/新闻类别/页码http://127.0.0.1:8000/show_news/1/2

解决: 把url中的需要获取的值部分,设置为正则表达式的一个组。 django在进行url匹配时,就会自动把匹配成功的内容,作为参数传递给视图函数。

位置参数: url中的正则表达式组,和视图函数中的参数一一对应,函数中的参数名可以随意指定。

示例:

# 位置参数:新闻查看/新闻类别/第几页url(r'^show_news/(\d+)/(\d+)$', views.show_news),# 视图函数:views.pydef show_news(request, a, b):  """显示新闻界面"""  return HttpResponse("新闻界面:%s %s" % (a, b))

关键字参数: 在位置参数的基础上,对正则表达式分组进行命名:

?P<组名>

视图函数中参数名,必须和正则表达式分组名一致。

示例:

# 关键字参数:新闻查看/新闻类别/第几页url(r'^show_news2/(?P<category>\d+)/(?P<page_no>\d+)$', views.show_news2),# 视图函数:views.pydef show_news2(request, category, page_no):  """显示新闻界面2"""  return HttpResponse("新闻界面:%s %s" % (category, page_no))

错误视图

Django内置了处理HTTP错误的视图(在django.views.defaults包下),主要错误及视图包括:

  • 404错误:page_not_found 视图 (找不到界面)
  • 500错误:server_error 视图    (服务器内部错误)
  • 403错误:permission_denied 视图    (权限拒绝)

一、404错误及视图

url匹配失败后,django会调用内置的 page_not_found 视图函数,该视图函数会调用 404.html的模板进行显示。

开发阶段可以开启调试模式,但产品上线后,要关闭调试模式。关闭调试模式后,会显示一个标准的错误页面

# 关闭调试模式(开发模式)DEBUG = False# 表示允许哪些域名可访问当前网站ALLOWED_HOSTS = ['*']

404错误界面可以自定义: 在项目templates目录面创建404.html,django找不到界面时,就会使用该界面了

二、500错误及视图

若是在执行视图函数时出现运行时错误,Django会默认会调用 django.views.defaults.server_error 视图,加载并显示 500.html 模板:

server error (500)

类似的,可以在项目的templates目录下,创建500.html来自定义该界面。

三、Django出错日志查看:

查看 Exception Type 以及 Exception Value

查看 Traceback中的出错行

希望本文所述对大家基于Django框架的Python程序设计有所帮助。


  • 上一条:
    Django框架模型简单介绍与使用分析
    下一条:
    使用django实现一个代码发布系统
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Filament v3.1版本发布(0个评论)
    • docker + gitea搭建一个git服务器流程步骤(0个评论)
    • websocket的三种架构方式使用优缺点浅析(0个评论)
    • ubuntu20.4系统中宿主机安装nginx服务,docker容器中安装php8.2实现运行laravel10框架网站(0个评论)
    • phpstudy_pro(小皮面板)中安装最新php8.2.9版本流程步骤(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2018-05
    • 2020-02
    • 2020-03
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-11
    • 2021-03
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-08
    • 2023-08
    • 2023-10
    • 2023-12
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客