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 资源作为工作目录. 在克隆的资源上添加或修改文件. 如果其他人修改了,你可以更新资源. 在提交前查看修改. 提交修改. 在修改完成后,如果发现错误,可 ...
随机推荐
- CodeForces.1174D.ArraySplitting.(后缀和数组 + 贪心)
题目链接 参考代码: #include <cstdio> #include <algorithm> using namespace std; typedef long long ...
- Kali系统 metasploit 使用教程
基础配置 由于kali 2.0 已经没有metasploit 这个服务了,所以service metasploit start 的方式不起作用. 在kali 2.0中启动带数据库支持的MSF方式如下: ...
- C# 反射实现动态加载程序集
原文:https://blog.csdn.net/pengdayong77/article/details/47622235 在.Net 中,程序集(Assembly)中保存了元数据(MetaData ...
- BUUCTF--findit
测试文件:https://buuoj.cn/files/7b8602971727c6c82ec0d360d5cad2c0/6a428ff2-25d7-403c-b28e-3f980a10a5a2.ap ...
- Ubuntu14 vsftp 的安装和虚拟用户配置
一.介绍 FTP 是 File Transfer Protocol (文件传输协议)的缩写 ,在 Unix/Linux 系统中常用的免费 FTP 服务器软件主要是 VSFTP,vsftp的官方地址:h ...
- js的validate插件异步效验
js代码 $(function () { $("#regForm").validate({ onsubmit:true,// 是否在提交是验证 onkeyup: false, // ...
- iOS 应用配置及证书生成教程
简介 首先你需要有一个苹果的开发者帐号,一台苹果电脑.点击查看苹果开发者账号注册流程 本教程需完成应用信息配置,包括如下两个基本配置: AppID Bundle ID 同时,生成 如下三个证书文件及对 ...
- oracle 使用escape转义%与_匹配字符为本来含义
举例: 查找姓名为M%的员工. select * from employee where staff_name like 'M\%' escape '\';
- 【编码的法则】谨慎的使用static
概述 static主要有三种使用方式,其中前两种在C/C++中使用,第三种只在C++语言中使用 1)静态局部变量 2)静态全局变量/函数 3)静态成员变量/函数 3 静态成员变量/函数 3.1静态成员 ...
- No qualifying bean of type xxx' available 的一种解决方法
获取bean Class beanClass = Class.forName(event.className); FilterEvent filterEvent = (FilterEvent)Bean ...