Django视图层

  • 简述

    • Django框架处理业务的逻辑一般如下(省略图,源于网络,侵删)

    • 可以看到,用户在输入网站的url之后看到的最直接的页面就是视图,而视图是基于HTML模板文件进行渲染的,数据来源于数据库也就是模型层。View是中间的关键部分,衔接HTTP请求、Python程序、HTML模板、ORM数据库。
  • 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函数名,决定请求被如何处理,返回什么结果。(路由不包括主机名)
    • 命名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视图层相关推荐

  1. Django视图层:视图函数、视图类

    一.视图层The view layer Django 具有 "视图" 的概念,负责处理用户的请求并返回响应. 二.视图函数 View functions mysite/views. ...

  2. 3 Django视图层

    视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . ...

  3. django language_第 58 天:Python Web开发 Django 简介

    今天来为大家介绍 Python 另一个 Web 开发框架 Django,它是一个基于 Python 定制的开源 Web 应用框架,最早源于一个在线新闻 Web 网站,后于2005年开源.Django ...

  4. Web开发-Django表单

    Django表单 简述 虽然在Django的核心组件中没有看到表单的影子,但是熟悉Web开发的都知道,表单控制是至关重要的. 表单一般放在某个app目录下的forms.py文件中. 基本操作 表单绑定 ...

  5. Django视图层:Django便捷函数,render()函数返回HttpResponse对象,redirect()函数返回HttpResponseRedirect指向传递参数的URL

    一.视图层The view layer Django 具有 "视图" 的概念,负责处理用户的请求并返回响应. 二.render()函数 语法:render(request, tem ...

  6. Django视图层:URL的反向解析(主路由include之namespace,子路由之name,模板标签{%url%},视图reverse()函数,反向解析示例,URL命名空间

    一.视图层The view layer Django 具有 "视图" 的概念,负责处理用户的请求并返回响应. 二.URL反向解析Reverse resolution of URLs ...

  7. Django视图层:嵌套参数,URLconf在查找什么?指定视图参数的默认值、include()路由转发三种方式、传递额外选项给 include()、传递额外选项给视图

    一.视图层The view layer Django 具有 "视图" 的概念,负责处理用户的请求并返回响应. 二.嵌套参数Nested arguments 正则表达式允许嵌套参数, ...

  8. Django视图层:URL调度器、Django处理一个请求、URLconf在查找什么?URL:①path()路径、②路径转换器Path converter、③正则表达式组re_path()

    一.视图层The view layer Django 具有 "视图" 的概念,负责处理用户的请求并返回响应. 二.URL调度器URL dispatcher urlpattern:U ...

  9. Python Web开发:Django+BootStrap实现简单的博客项目

    创建blog的项目结构 关于如何创建一个Django项目,请查看[Python Web开发:使用Django框架创建HolleWorld项目] 创建blog的数据模型 创建一个文章类 所有开发都是数据 ...

最新文章

  1. 软件工程概论课程总结
  2. hdu 5339 Untitled【搜索】
  3. matlab imfilter函数,Matlab的imfilter函数用法详解
  4. python if语句
  5. c#爬虫-1688官网自动登录
  6. xml生成2维码_MyBatis(2)之MyBatis-Generator最佳实践
  7. php裁剪图片并上传源码,改写jcrop插件+php的图片上传实现与裁剪一体化
  8. unit类型是什么?_面试官虚晃一枪:项目中有用过锁吗?能解释一下什么是AQS?...
  9. Win7系统提示NVIDIA显示设置不可用怎么办
  10. 六时车主 App iOS隐私政策
  11. IOS之Info.plist文件简介
  12. servlet ehcache beanfactroy c3p0 配置文件
  13. YouTube推荐系统算法梳理
  14. 如何在页面中获取到ModelAndView绑定的值
  15. rdd数据存内存 数据量_技术分享|大数据技术初探之Spark 任务调度与优化
  16. 贪心高性能神经网络与AI芯片~学习笔记总计1
  17. android h5 指定浏览器_微信h5网页如何实现跳转到手机默认浏览器
  18. Hulu日常实习面经 (SDE/RSDE)
  19. 翻译连载 | JavaScript轻量级函数式编程-第 8 章:列表操作 |《你不知道的JS》姊妹篇...
  20. 【100%通过率】华为OD机试真题 Java 实现【预订酒店】【2022.11 Q4 新题】

热门文章

  1. Quartz框架中的JobStore
  2. 设计 Redis Key
  3. 通过enum实现枚举类
  4. 传统生成API文档弊端
  5. 守护线程与非守护线程
  6. System类的常用方法
  7. ThreadLocal以及增强
  8. java11开源中国,Java 11 正式发布!
  9. ubuntu中supervisor的安装和学习
  10. 如何将低压精密运算放大器的性能扩展到高压高侧电流检测应用(高电流电阻采集电压电路图及误差分析)