背景知识

要使用 Django,首先必须先安装 Django。

下图是 Django 官网的版本支持,我们可以看到上面有一个 LTS 存在。什么是 LTS 呢?LTS ,long-term support,也就是长期技术支持版的意思。长期技术支持版意味着资料的丰富程度和稳定性会比其他版本的要好。可以看到,目前的长期技术是 1.11,而上一个长期技术支持版是 1.8 ,我们尽量使用 1.11 长期技术支持版,因为企业在做技术选型的时候,选择的往往不是最新的,而是最稳定的。

安装 Django,打开 Django 项目

选定版本之后,安装就一句

pip3 install django==1.11.11

安装完成之后可以查看 Django 版本

django-admin --version

新建 Django 项目

django-admin startproject 项目名称

当然,我们开发 Django 项目的时候,通常会使用 pycharm 这款 IDE。

如上图所示,你可以设置项目存储的路径,然后可以新建一个虚拟环境,也可以选择使用已有的虚拟环境。

新建项目打开之后,你会看到如下图所示的文件结构。

manage.py        # 管理Django项目的入口文件
settings.py # 设置相关
urls.py # 路径与函数对应关系
wsgi.py # socket通信相关
__init__.py # 只是为了表明这个文件夹是一个包

Django版,根据不同的路径,返回不同的内容

我们先像上一次那样,一步一步来,熟悉 Django 项目结构。

我们先把路径与函数的对应关系处理好,先在 urls.py 中进行配置。

HttpResponse 模块的引入

在这里,我们需要引进 Django 自带的处理 HTTP 响应的模块 HttpResponse

HttpResponse 模块可以帮我们做 HTTP 协议的响应,我们只需要关心处理用户请求的函数就可以了,而不需要关注协议本身所做的事情。

from django.conf.urls import url

# 导入 Django 自带的 HttpResponse 模块,用它来帮我们做HTTP协议的响应
# 这样,我们只需要关心处理用户请求的函数就可以了,而不需要关注协议本身所做的事情
from django.shortcuts import HttpResponse def yimi(request):
# request参数保存了所有和用户浏览器请求相关的数据
# 把想要显示在页面上的内容写到 HttpResponse 函数的括号里面即可
return HttpResponse('<h1>hello,yimi!</h1>') def xiaohei(request):
# request参数保存了所有和用户浏览器请求相关的数据
# 把想要显示在页面上的内容写到 HttpResponse 函数的括号里面即可
return HttpResponse('<h1>hello,xiaohei!</h1>') # 保存了路径与函数的对应关系
urlpatterns = [
url(r'^yimi/$', yimi),
url(r'^xiaohei/$', xiaohei),
]

urls.py

配置好后,如何查看呢?需要运行 Django 项目。

命令行运行 Django 项目:在项目的根目录下(也就是有manage.py的那个目录),运行:

python3 manage.py runserver IP:端口  --> 在指定的IP和端口启动
python3 manage.py runserver 端口 --> 在指定的端口启动
python3 manage.py runserver --> 默认在本机的8000端口启动

pycharm 运行:点击右上角绿色的小三角,直接可以启动Django项目(前提是小三角左边是你的Django项目名)。

运行后,输入 127.0.0.1:8000/xiaohei/ 可以看到正常的运行结果。

可以感受到,使用 Django 框架之后,开发服务端方便了很多。我们只需要做 ①定义函数 ②定义函数和路径的对应关系 这两件事情就可以使得服务端正常响应。

settings配置

settings.py中有几个配置我们必须清楚的。

BASE_DIR 配置

所以,BASE_DIR 也就是......

 TEMPLATES 配置

有人可能会纳闷,这里 'DIRS' 为什么不使用字符串拼接的方式呢?原因,你这一个项目在开发的时候用的是 Windows 平台,项目最终都要部署到服务器,服务器却不一定是 Windows 平台的,大部分情况下都是 Linux 平台,Windows 平台和 Linux 平台的路径分隔符是不一样的,所以通过 os 模块函数进行拼接会更好。

STATICFILES_DIRS 静态文件文件夹配置

一个 HTML 通常会有许许多多的 CSS 样式和 js 动画效果,因此会有许许多多的 css 文件和 js 文件,它们通常不会和 HTML 文件放在一起,而是放在一个叫 static 的文件夹中。这个 static 文件夹就叫做静态文件夹。

在项目根目录下新建 static 目录

我们新建了 static 目录用来放静态文件,要想要 Django 帮我们找到这些静态文件,必须先在 settings.py 中告诉它这个文件夹在哪里。

当然,如果你有多个静态文件目录,你也可以写到 STATICFILES_DIRS 里面,Django 会按照你写的目录的先后顺序,从上往下进行静态文件的查找。

返回完整的 HTML 页面

模板的引入

我们在 templates 目录下新建了一个 yimi.html,然后在 urls.py 中通过之前 python 文件读取的方式返回完整的 HTML 页面

可以发现,通过 python 的方式查找文件需要我们自己制定文件路径,过于麻烦

render 模块的引入

这时候,我们可以引入 render 模块,让 Django 自己去帮我们找 HTML 文件

from django.conf.urls import url

# 导入 Django 自带的 HttpResponse 模块,用它来帮我们做HTTP协议的响应
# 这样,我们只需要关心处理用户请求的函数就可以了,而不需要关注协议本身所做的事情
from django.shortcuts import HttpResponse, render # 要返回一个完整的HTML文件,就需要用到render模块 def yimi(request):
# request参数保存了所有和用户浏览器请求相关的数据
# 把想要显示在页面上的内容写到 HttpResponse 函数的括号里面即可
# with open('./templates/yimi.html', 'r', encoding='utf-8') as f:
# data = f.read()
# return HttpResponse('<h1>hello,yimi!</h1>') # render的第一个参数是request,第二个参数是我们想要返回的HTML文件名字
# 这个文件的路径就是之前在settings.py中配置好的 templates
return render(request, 'yimi.html') def xiaohei(request):
# request参数保存了所有和用户浏览器请求相关的数据
# 把想要显示在页面上的内容写到 HttpResponse 函数的括号里面即可
return HttpResponse('<h1>hello,xiaohei!</h1>') # 保存了路径与函数的对应关系
urlpatterns = [
url(r'^yimi/$', yimi),
url(r'^xiaohei/$', xiaohei),
]

urls.py

 静态文件的引入

你可能会问:“我写了一个超级好看的页面,把它的 css 独立出来,放在 Django 项目的根目录下了,应该怎么在 HTML 页面中引进来呢?”

只需下图所示一步即可

views.py 文件的引入

到这里,你可能会发现一些问题。

例如,我们现在的全部逻辑处理函数 和 函数与路径的对应关系,都是写在 urls.py 中的,随着我们项目的发展壮大,我们需要的处理函数将会越来越多,将处理函数与函数路径的对应关系写在一个文件中,将会大大影响我们对程序的理解。

因此,我们现在要将我们自己写的 逻辑处理函数 和 函数与路径的对应关系 分离开,分成独立的文件。一个专门用来写逻辑处理函数,用于处理客户端发过来的请求;另一个则专门用来写函数与路径的对应关系。

在 项目同名 APP 目录下新建一个 views.py 文件,把原来在 urls.py 中写的逻辑处理函数全部移到 views.py 中。

urls.py 文件中需要导入我们写的那些逻辑函数。

这样下来,Django 项目中各个文件的关系也就清晰多了,而且,我不会告诉你,到现在,你已经接触到了 Django MTV 框架的精髓的哦^_^

下节预告

到这里,相信你也已经成功地安装了 Django ,并熟悉了 HttpResponse 模块、render 模块的使用,还有 settings 中 BASE_DIR、TEMPLATES、STATICFILES_DIRS 的配置,知晓了为什么要把 views 和 urls 文件进行分离。

下一节,我们将通过一个用户登录页面,来进一步学习 Django 的使用,体会 Django 的魅力所在。

作者: 守护窗明守护爱

出处: https://www.cnblogs.com/chuangming/p/9076721.html

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出。如有问题,可邮件(1269619593@qq.com)咨询.

一步一步理解 python web 框架,才不会从入门到放弃 -- 开始使用 Django的更多相关文章

  1. 一步一步理解 python web 框架,才不会从入门到放弃

    要想清楚地理解 python web 框架,首先要清楚浏览器访问服务器的过程. 用户通过浏览器浏览网站的过程: 用户浏览器(socket客户端) 3. 客户端往服务端发消息 6. 客户端接收消息 7. ...

  2. 一步一步理解 python web 框架,才不会从入门到放弃 -- 简单登录页面

    上一节,我们基本了解了 Django 的一些配置,这一节,我们将通过一个简单的登录页面,进一步学习 Django 的使用. 新建项目 首先,新建一个 Django 项目,记得别弄错了哦. settin ...

  3. python web框架Flask——csrf攻击

    CSRF是什么? (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click ...

  4. 一文读懂Python web框架和web服务器之间的关系

    我们都知道 Python 作为一门强大的语言,能够适应快速原型和较大项目的制作,因此被广泛用于 web 应用程序的开发中. 在面试的过程中,大家或多或少都被问到过这样一个问题:一个请求从浏览器发出到数 ...

  5. python web框架介绍对比

    Django Python框架虽然说是百花齐放,但仍然有那么一家是最大的,它就是Django.要说Django是Python框架里最好的,有人同意也有人 坚决反对,但说Django的文档最完善.市场占 ...

  6. “脚踢各大Python Web框架”,Sanic真有这能耐么?

    在Github上,Sanic第一句介绍语就是: "Sanic is a Flask-like Python 3.5+ web server that's written to go fast ...

  7. python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...

  8. Python Web框架Tornado的异步处理代码演示样例

    1. What is Tornado Tornado是一个轻量级但高性能的Python web框架,与还有一个流行的Python web框架Django相比.tornado不提供操作数据库的ORM接口 ...

  9. Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...

随机推荐

  1. Supervisor安装、配置、开启启动

    1.安装Python包管理工具(easy_install) wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py -O - ...

  2. miniui几个常用知识点汇总

    1.在表格中去除系统自带的序列号,请看代码: function allAndBrief(id) { if(id==1){ grid.set({ columns: [ { type: "ind ...

  3. 【个人学习笔记】走近H5

    一.HTML5概述 1.HTML5新特性 兼容性(ie9+).合理性.效率.安全性.分离.简化.通用性.无插件 2.HTML5构成 主要包括下面这些功能:Canvas(2D和3D).Channel消息 ...

  4. 用js来实现那些数据结构15(图01)

    其实在上一篇介绍树结构的时候,已经有了一些算法的相关内容介入.而在图这种数据结构下,会有更多有关图的算法,比如广度优先搜索,深度优先搜索最短路径算法等等.这是我们要介绍的最后一个数据结构.同时也是本系 ...

  5. 关于mysql保存数据的时候报问题分析  普通的字符串或者表情都是占位3个字节,所以utf8足够用了,但是移动端的表情符号占位是4个字节,普通的utf8就不够用了,为了应对无线互联网的机遇和挑战、避免 emoji 表情符号带来的问题、涉及无线相关的 MySQL 数据库建议都提前采用 utstring value:'\xF0\x9F\x98\x82\xF0\x9F...' for ...

    问题分析 普通的字符串或者表情都是占位3个字节,所以utf8足够用了,但是移动端的表情符号占位是4个字节,普通的utf8就不够用了,为了应对无线互联网的机遇和挑战.避免 emoji 表情符号带来的问题 ...

  6. 视频压缩:I帧、P帧、B帧

    /*************************************************************************************************** ...

  7. Ubuntu设置代理的方法

    用过Linux的都知道,众多的PROXY配置,让人应接不暇,本文列出常见的一些PROXY的配置 1.apt-get proxy 的配置sudo gedit /etc/apt/apt.conf NOTE ...

  8. mobile angualar ui的简单使用

    最近做一个微信App形式的业务平台,之前从别人的推荐文中知道了mobile angualar ui这个东西,这次纯做mobile Web就试用了一下,之前PCWeb中用过AngularJS,Hybri ...

  9. php中的抽象方法和抽象类,简单明了,一点通

    1.什么是抽象方法?    我们在类里面定义的没有方法提的方法就是抽象方法.所谓的没有方法体指的是,在声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后加上分号结束,另外在声明抽象方法时方 ...

  10. js中几种实用的跨域方法原理详解【转】

    源地址:http://www.cnblogs.com/2050/p/3191744.html 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通 ...