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 资源作为工作目录. 在克隆的资源上添加或修改文件. 如果其他人修改了,你可以更新资源. 在提交前查看修改. 提交修改. 在修改完成后,如果发现错误,可 ...
随机推荐
- Win10不能远程其他远程计算机的解决办法
Win10不能远程其他远程计算机的解决办法 转自: https://blog.csdn.net/qq_38197830/article/details/69488236 首先打开控制面板——> ...
- Bash and a Tough Math Puzzle CodeForces 914D 线段树+gcd数论
Bash and a Tough Math Puzzle CodeForces 914D 线段树+gcd数论 题意 给你一段数,然后小明去猜某一区间内的gcd,这里不一定是准确值,如果在这个区间内改变 ...
- 开发一个 Parcel-vue 脚手架工具
前言 像我们熟悉的 vue-cli,create-react-app 等脚手架,只需要输入简单的命令 vue init webpack project,即可快速帮我们生成一个初始项目.在实际工作中,我 ...
- python 搜索路径顺序查找
但我们通过 import 或者frome .. import...查找模块的时候,当你导入一个模块,Python 解析器对模块位置的搜索顺序是 1.当前目录 2, 如果不在当前目录,Python 则搜 ...
- 搜索(BFS)---最短单词路径
最短单词路径 127. Word Ladder (Medium) Input: beginWord = "hit", endWord = "cog", word ...
- popen, pclose - process I/O
SYNOPSIS #include <stdio.h> FILE *popen(const char *command, const char *type); int pclose(FIL ...
- Linux 内核层和 用户层 配置 GPIO 引脚
Linux BSP 开发的基础就是和GPIO打交道, 下面总结下这几天对某家开发板的GPIO控制的知识. 公司的开发板用的是 DTB 模式 ,首先,进入 dts,dtsi文件查看关于GPIO 的模块 ...
- 动态规划—distinct-subsequences
题目: Given a string S and a string T, count the number of distinct subsequences of T in S. A subseque ...
- C++中的const_cast
开发环境 Qt Creator 4.8.2 编译器版本 MinGw 32-bit const_cast 用法: const_cast<type_id> (expression) 说明: 该 ...
- mongodb 用户 权限 设置 详解
原文地址:http://blog.51yip.com/nosql/1575.html 我知道的关系型数据库都是有权限控制的,什么用户能访问什么库,什么表,什么用户可以插入,更新,而有的用户只有读取权限 ...