Django 的工作流程和基本内容
1.一个基本的Django请求流程
我们先开始写一个基本的请求。这个请求的获取和处理,是使用 urls.py 和 views.py 处理的。我们使用命令 python manage.py runserver 0.0.0.0:8000 启动服务器,这个操作会去读取项目目录下的 settings.py 文件,里面是这个项目的所有配置信息,里面有一项配置 ROOT_URLCONF , 这个配置的是项目请求路径和处理view的映射器。

从上我们可以看到,配置位置是 ProjectManagement.urls ,即代表项目下的urls.py 为路径和view的映射器。下面来看一下项目下的 urls.py 文件,如下所示。

可以看到我们这个py文件定义了一个叫做 urlpatterns 的list,里面陈列了项目中所有的请求路径和处理view的映射url(), 第一部分是正则表达式,正则匹配我们输入的链接地址,第二部分是处理该链接发来的请求的view。其中我们自定义了一个url,是 url(r’^now/’, views.current_datetime()), 这个正则表达式代表所有输入路径以now/开头的请求都会交给 views.current_datetime 处理。其中views.current_datatime 是我们在views.py 中定义一个请求处理函数,代码如下。

这个处理函数的特点是参数为request,用来接收我们发来的请求数据,我们在这个函数中构造了一个包含当前时间的html代码,然后使用HttpResponse函数分装返回给前台页面,最后我们启动服务,在页面上输入localhost:8000/now 就看到了如下信息。

看到了我们构造的信息。这样一个基本的请求处理流程就完成了。

从上面的urls.py中,我们可以看出,django是松耦合。路径和视图的映射与视图的实现都是分开的,也就是说,我们修改了视图,不影响映射关系,修改映射关系,不影响视图。
对于常见的Restful URL,我们应该怎么处理?
一般使用如下方法


2. django的模板系统
通过我们上面在python代码中拼接html代码,是不是有点很不方便。django有模板系统,方便我们分离前后台,实现数据和页面的分离。模板系统主要包括定义模板,定义上下文,匹配模板和上下文。其中我们的模板即可是文件中的html代码,也可以是我们定义的html代码字符串。
- 定义模板
使用django.template.Template定义模板
- 定义上下文
使用django.template.Context定义上下文
- 模板渲染
使用template.render(context)渲染模板
代码如下:

这个只是实现了我们的html代码和业务数据的分离,并没解决html代码硬编码的问题。一般来说,html代码一般写在html文件里。所以,继续学习其他配置模板的方式。我们知道在项目中的settings.py是项目配置文件,它也是一个python文件,里面定义了一个变量 TEMPLATES ,这个变量就是用来配置我们在项目中定义的模板文件的目录。我们在项目中创建一个template文件夹,同时修改settings.py 的配置。

接下来,我们在模板文件夹下创建一个模板html,然后使用django.templates.get_template加载该模板文件,get_template可以使用子目录,这个子目录相对于我们在settings.py中定义的模板目录。代码如下。

这样就避免了模板文件html的硬编码。学过jdbc的人都知道,这种代码的格式是一样的,属于样式模板文件,每次都这样写,效率不高,所以引入了一条龙服务的django.shortcuts.render_to_response,无需显式创建模板和上下文以及使用HttpResponse,代码如下。

模板系统中的模板标签:(做过java web都对这个肯定很熟悉,模板标签和el表达式类似)
1. {% if name%}{% endif%} {% else%}: 一定要有结束标签,并且有多个条件时,不支持括号
2.{% for i in list %} {% endfor%}: 一定要有结束标签,不支持break和continue
3.{% ifequal a b%}{% ifequal a b%} {% ifnotequal a b%}{% ifequal a b%} : 判断a和b是否相等
4.{# #} : 注释
5. {{ name | lower }} : 过滤器
一般来说模板中不能改变python变量的值,同时也不能调用python代码。
Django 的工作流程和基本内容的更多相关文章
- Django 工作流程
一.Django 工作流程 在开始具体的代码之旅前,先来宏观地看下Django是如何处理Http Resquest的,如下图: 假设你已经在浏览器输入了 http://127.0.0.1:8000/p ...
- day18 js 正则,UI框架,Django helloworld 以及完整工作流程
JS正则: text 判断字符串是否符合规定的正则表达式 exec 获取匹配的数据 默认情况下: 只要能匹配到就返回true 否则返回false 只匹配数字: 所以J ...
- django入门 -- 简单流程
django入门 -- 简单流程 简介 通过简单示例,使用django完成基本流程的开发,学习django的主要的知识点,在后续课程中会逐个知识点进行深入讲解 以“图书-英雄”管理为示例 主要知识点介 ...
- Storm 中什么是-acker,acker工作流程介绍
概述 我们知道storm一个很重要的特性是它能够保证你发出的每条消息都会被完整处理, 完整处理的意思是指: 一个tuple被完全处理的意思是: 这个tuple以及由这个tuple所导致的所有的tupl ...
- gitlab工作流程简介
gitlab工作流程简介 新建项目流程 创建/导入项目 可以选择导入github.bitbucket项目,也可以新建空白项目,还可以从SVN导入项目 建议选择private等级 初始化项目 1.本地克 ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍
RDIFramework.NET ━ .NET快速信息化系统开发框架 工作流程组件介绍 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部 ...
- NSURLSession使用说明及后台工作流程分析
原文摘自http://www.cocoachina.com/industry/20131106/7304.html NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConne ...
- 了解SpringMVC框架及基本工作流程
传统原生的JSP+Servlet在开发上过程上虽然简单明了,JSP页面传递数据到Servlet,Servlet整理数据(逻辑开发)或者从数据库提取数据接着再转发到JSP页面上,但是其似乎只能止步于此, ...
- git工作流程
git工作流程 一般工作流程如下: 克隆 Git 资源作为工作目录. 在克隆的资源上添加或修改文件. 如果其他人修改了,你可以更新资源. 在提交前查看修改. 提交修改. 在修改完成后,如果发现错误,可 ...
随机推荐
- 史上最全的ORACLE基础教程
ORACLE命令和语句挺多,全部记忆下来不现实,况且有不常用的指令.下面把大部分的指令做了记录和详细的注释.建议收藏.转发此篇文章,如果忘记可以翻出来查查.关注公众号it_learn获取更多学习资源 ...
- [Git] 013 远程仓库篇 第零话 使用前的一些配置
0. 前言 本地仓库和 GitHub 上的远程仓库之间的传输是通过 "SSH" 加密的,所以使用前需要进行一些设置 这回的任务 设置"身份象征" 创建 &quo ...
- Linux 查看日志文件
1. tail命令:从文本文件的尾部开始查看,用于显示文本文件的末尾几行 tail -n filename 指定需要显示多少行 tail -f filename 实时 ...
- HTMLTestRunner_PY3脚本代码
HTMLTestRunner_PY3.py文件代码如下: # -*- coding: utf-8 -*- """ A TestRunner for use with th ...
- python抓取往期双色球
import requests import json,csv ''' http://m.zhcw.com/clienth5.do?lottery=FC_SSQ&pageSize=20& ...
- MIT 6.824学习笔记4 Lab1
现在我们准备做第一个作业Lab1啦 wjk大神也在做6.824,可以参考大神的笔记https://github.com/zzzyyyxxxmmm/MIT6824_Distribute_System P ...
- C# 打印机连接状态判断
原文:https://www.cnblogs.com/Old-Fish/p/6258118.html /// <summary> /// 判断是否连接打印机 /// </summar ...
- 表格类型数据,Excel csv导入,导出操作
import pandas # 创建表格格式# ad = pandas.DataFrame({"a": range(1, 10), "b": range(10, ...
- 基于谷歌开源的TensorFlow Object Detection API视频物体识别系统搭建自己的应用(四)
本章主要内容是利用mqtt.多线程.队列实现模型一次加载,批量图片识别分类功能 目录结构如下: mqtt连接及多线程队列管理 MqttManager.py # -*- coding:utf8 -*- ...
- Docker设置容器开机自启动
设置如下: docker update --restart=always 镜像ID 例如:docker update --restart=always e39a959d7bff. 参考:https:/ ...