Web开发-Django视图层
Django视图层
- 简述
- Django框架处理业务的逻辑一般如下(省略图,源于网络,侵删)
- 可以看到,用户在输入网站的url之后看到的最直接的页面就是视图,而视图是基于HTML模板文件进行渲染的,数据来源于数据库也就是模型层。View是中间的关键部分,衔接HTTP请求、Python程序、HTML模板、ORM数据库。
- Django框架处理业务的逻辑一般如下(省略图,源于网络,侵删)
- URL映射
- URL分发(URL dispatcher)映射配置可以被看做Django项目的入口配置,通过URL dispatcher可以指定用户的每一个访问的后台Python处理函数是什么。
- 普通URL映射
- 每个Django项目都有一个urls.py文件用于维护URL dispatcher。
from django.conf.urls import url, includefrom django.contrib import adminurlpatterns = [url(r'^admin/', admin.site.urls),url(r'app/', include('app.urls')),url(r'app2', include('app2.urls'))]
- 不妨看上面这个路由演示文件。
- 在urls.py文件中必须声明urlpatterns变量用来保存路由,每一个路由的形式为
url(r'pattern',view_func)
,第一个参数是一个正则表达式(关于正则表达式这里不多说了,自行学习,Django路由用到的正则表达式是很简单的,事实上对于很难的正则表达式有着一个说法:当你解决一个问题是决定要用正则表达式,那么。它就是两个问题了。),决定了路由匹配模式,第二个变量是一个view函数名,决定请求被如何处理,返回什么结果。(路由不包括主机名)
- 在urls.py文件中必须声明urlpatterns变量用来保存路由,每一个路由的形式为
- 命名URL映射
- 在普通的URL参数映射中,固然可以通过URL传递参数,但是参数是按照路径中的顺序传递给view函数,这种方法不太友好。而命名URL参数映射使得开发者可以定义这些被传递参数的参数名称,定义方式一般为?P<param_name>pattern。
- 如
url(r'year/(?P<year>[0-9]{4})/', views.year),
- 访问及结果如下
- 分布式URL映射
- 一般在开发中,将整个项目的路由堆到一个urls.py文件里面不好也不太现实,对于每一个app都可以新建一个urls.py文件,使用时利用django.conf.urls中的include函数将其加入主配置的urls.py文件即可。(如上面代码所示)app中的urls文件与主文件格式一致。
- 反向解析
- 除了从HTTP URL映射到视图函数的功能外,Django提供了反向的从映射名到URL地址的反向解析功能。URL反向解析使得开发者可以使用映射名代替很多需要写绝对URL映射的地方,提高了代码的可维护性。
- 在模板文件中使用{% url %}标签调用反向解析(其实就是URL跳转);在Python程序中使用django.core.urlresolvers.reverse()函数进行反向解析。
- 注意,为了反向解析的参数名,url中需要添加第三个参数,name。
url(r'year/(?P<year>[0-9]{4})/', views.year, name="when"),
url(r'year2', views.year2),
- 视图函数定义如下
def year2(request):return HttpResponseRedirect(reverse('when', args=['1998']))
- 输入http:127.0.0.1:8000/year2可以看到瞬间跳转命名的视图,并携带参数进行反向解析。
- 视图函数
- 前面已经使用了不少视图函数,这里来细说视图函数,
- 当你输入一个URL时,Django会到urlpattern里面查找第一个符合条件的,并得到这个路由设置的函数,随即将request带给这个函数,函数得到request请求,从中获得数据,返回一个HTTP Response。
- 构造返回的Response一般三种方式
- 直接构造HTTP Body
- 用数据渲染HTML模板
- 如果存在逻辑错误,返回HTTP错误或者其他状态
- 直接构造HTML页面
- 对于简单需求,返回一个含有字符串的HTML页面即可,此时可以使用HttpResponse封装这个字符串。
- django.http.HttpResponse
- 用数据渲染HTML文件
- 例如将之前的year函数修改如下,将URL传递过来的year参数渲染到HTML页面
def year(request, year):return render(request, 'render.html', {'year': year, })
- 此时访问/year/1998/就可以看到渲染后的结果。(注意HTML文件所在的templates文件夹需要在settings文件中模板相关的变量中设置路径,具体可以查看我的源码)
- 返回HTTP错误
- 可以使用HttpResponse传递参数status
- 对于各种HTTP状态,Django已经封装了不少HttpResponse的子类,可以查看源码使用。
- 模板语法
- 模板文件主要就是HTML文件配套CSS或者JS文件。
- 除了HTML原有的语法,Django自定义了一套模板语法。
- 变量替换
- 在HTML文件的任何位置,都可以使用变量替换。
{{ data.a }}
- 这里的data就是render时传递的参数字典中的一个值。
- 过滤器
- 放在变量后用于控制变量显示格式的技术,变量与过滤器使用管道符"|"连接,有Linux基础的应该知道。
{{ data.a | upper }}
- 将upper过滤器应用到a上。
- 常见过滤器可以查看源码。
- 流程控制
- 循环逻辑
{% for data in datas %}<h> {{data.a}}</h>{% endfor %}
- 判断逻辑
{% if data.b < 10 %}<h1> {{data.a}}</h1>(% elif data.b < 20 %}<h2> {{data.a}} </h2>{% else %}<p> data.a </p>
- 循环逻辑
- 模板继承
- 利用extends语句
- 不细说,现在前端自然会有一个较好的逻辑。
- 补充说明
- 具体介绍了视图层的相关内容
- 本项目参考书为《Python高效开发实战》刘长龙著
- 使用到的所有重要包会列在requirements.txt文件中
- 具体代码可以查看我的GitHub,欢迎star或者fork
Web开发-Django视图层相关推荐
- Django视图层:视图函数、视图类
一.视图层The view layer Django 具有 "视图" 的概念,负责处理用户的请求并返回响应. 二.视图函数 View functions mysite/views. ...
- 3 Django视图层
视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . ...
- django language_第 58 天:Python Web开发 Django 简介
今天来为大家介绍 Python 另一个 Web 开发框架 Django,它是一个基于 Python 定制的开源 Web 应用框架,最早源于一个在线新闻 Web 网站,后于2005年开源.Django ...
- Web开发-Django表单
Django表单 简述 虽然在Django的核心组件中没有看到表单的影子,但是熟悉Web开发的都知道,表单控制是至关重要的. 表单一般放在某个app目录下的forms.py文件中. 基本操作 表单绑定 ...
- Django视图层:Django便捷函数,render()函数返回HttpResponse对象,redirect()函数返回HttpResponseRedirect指向传递参数的URL
一.视图层The view layer Django 具有 "视图" 的概念,负责处理用户的请求并返回响应. 二.render()函数 语法:render(request, tem ...
- Django视图层:URL的反向解析(主路由include之namespace,子路由之name,模板标签{%url%},视图reverse()函数,反向解析示例,URL命名空间
一.视图层The view layer Django 具有 "视图" 的概念,负责处理用户的请求并返回响应. 二.URL反向解析Reverse resolution of URLs ...
- Django视图层:嵌套参数,URLconf在查找什么?指定视图参数的默认值、include()路由转发三种方式、传递额外选项给 include()、传递额外选项给视图
一.视图层The view layer Django 具有 "视图" 的概念,负责处理用户的请求并返回响应. 二.嵌套参数Nested arguments 正则表达式允许嵌套参数, ...
- Django视图层:URL调度器、Django处理一个请求、URLconf在查找什么?URL:①path()路径、②路径转换器Path converter、③正则表达式组re_path()
一.视图层The view layer Django 具有 "视图" 的概念,负责处理用户的请求并返回响应. 二.URL调度器URL dispatcher urlpattern:U ...
- Python Web开发:Django+BootStrap实现简单的博客项目
创建blog的项目结构 关于如何创建一个Django项目,请查看[Python Web开发:使用Django框架创建HolleWorld项目] 创建blog的数据模型 创建一个文章类 所有开发都是数据 ...
最新文章
- 软件工程概论课程总结
- hdu 5339 Untitled【搜索】
- matlab imfilter函数,Matlab的imfilter函数用法详解
- python if语句
- c#爬虫-1688官网自动登录
- xml生成2维码_MyBatis(2)之MyBatis-Generator最佳实践
- php裁剪图片并上传源码,改写jcrop插件+php的图片上传实现与裁剪一体化
- unit类型是什么?_面试官虚晃一枪:项目中有用过锁吗?能解释一下什么是AQS?...
- Win7系统提示NVIDIA显示设置不可用怎么办
- 六时车主 App iOS隐私政策
- IOS之Info.plist文件简介
- servlet ehcache beanfactroy c3p0 配置文件
- YouTube推荐系统算法梳理
- 如何在页面中获取到ModelAndView绑定的值
- rdd数据存内存 数据量_技术分享|大数据技术初探之Spark 任务调度与优化
- 贪心高性能神经网络与AI芯片~学习笔记总计1
- android h5 指定浏览器_微信h5网页如何实现跳转到手机默认浏览器
- Hulu日常实习面经 (SDE/RSDE)
- 翻译连载 | JavaScript轻量级函数式编程-第 8 章:列表操作 |《你不知道的JS》姊妹篇...
- 【100%通过率】华为OD机试真题 Java 实现【预订酒店】【2022.11 Q4 新题】