Django:(01) 关于什么是Django?
一、从 WSGI 开始了解 Django
在了解 Django 之前有必要先了解一下 Python 被用于 Web 开发的基础协议——WSGI。
在开发 web 应用时,我们不希望接触到TCP连接、HTTP原始请求和响应格式等一系列麻烦的事情,我们只想专心用 Python 编写 Web 业务,我们该怎么做?
我们需要把这些底层的麻烦事封装成一个统一的接口。这个现成的接口就是WSGI:Web Server Gateway Interface。
WSGI接口定义非常简单,我们只需要实现 application()函数,它接收两个参数:
第一个参数接收包含所有 HTTP 请求信息的 dict 对象;
第二个参数是一个函数对象,用于发送了HTTP 响应的 Header,在 application() 函数内部它只能被调用一次,并且在调用时要传入两个参数:一个是 HTTP 响应码,一个是一组 list 表示的 HTTP Header,每个 Header 用一个包含两个特定的字符串的 tuple 表示。
下面是一个最迷你的 Python 应用:
# hello.py
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return ['Hello, web!']
那么,怎么让它运行起来呢?
我们需要启动 WSGI 服务器来调用(加载)application() 函数。
于是,我们需要另外编写一个文件来启动 WSGI 服务:
# server.py from wsgiref.simple_server import make_server from hello import application # 创建一个服务器对象
httpd = make_server('127.0.0.1', 8000, application) # 监听HTTP请求:
httpd.serve_forever()
运行 server.py 文件,然后就可以在浏览器通过IP和端口访问我们的 mini Web 应用了。
基于这样的一个应用我们当然可以拓展成更复杂的 Web 应用,但是到最后我们会发现,我们依然在不停地重复的造轮子。
天才的程序员会很自然地在 WSGI 之上再抽象出一些框架来简化我们的 Web 开发——Django 就是其中之一。
ps:我们要运行用 Django 框架开发出来的 Web 应用,使用的是 uWSGI 而不是上面简单的 server.py
uWSGI,是一个程序,充当Web服务器或中间件。
如果架构是Nginx+uWSGI+APP,uWSGI是一个中间件
如果架构是uWSGI+APP,uWSGI是一个服务器
二、Django概述的概述
- Django的主要目的是简便、快速的开发数据库驱动的网站;
- Django强调代码复用和快速开发,具有很强的可扩展性;
- Django有许多功能强大的第三方插件,多个组件可以很方便的以"插件"形式服务于整个框架;
- Django MVT模式:Model,View,Template (Django的 MVT 与通常Web开发中的 MVC 没有本质区别)
- 重量级框架,Django原生提供了众多的功能组件,让开发更简便快速:
数据库ORM支持
模板
表单
认证权限
Admin管理站点
session机制
缓存
三、项目中的Django应用

- django 自带了一个纯 python 编写的开发阶段使用的 web 服务器,用来预览网站效果和进行开发调试。
- 一般产品上线才使用 uWSGI(服务器) 或者 uWSGI(中间件)+Nginx。
现在我们想创建一个 Django 应用,我们该从哪里开始呢?
- 首先,需要考虑虚拟环境

(1)创建虚拟环境(联网)
mkvirtualenv django_py3 -p python3
(2)在虚拟环境中安装 Django
pip install django==1.11.11
(3)相关命令
2、创建项目(两种方式)
(1)通过 pycharm 创建(推荐)

(2)通过命令行创建
- 先进入虚拟环境:
workon 虚拟环境名
- 创建Django项目:
django-admin startproject 项目名
- 进入上一步创建出来的项目文件根目录下:
cd 项目根目录
- 创建 templates 模板目录(需要手动配置setting.py配置项)

- 创建应用:
# manage.py 为上述创建项目时自动生成的管理文件
python manage.py startapp 应用名
- 配置应用:
用命令行每创建的一个应用要执行这一步操作。

3、运行测试服务器(两种方式)
(1)通过命令行运行
# 可以不写IP和端口,默认IP是127.0.0.1,默认端口为8000
python manage.py runserver ip:端口
(2)通过Pycharm运行
- 点击运行按钮

- 可以手动指定服务器运行的ip和端口,不指定默认值为: 127.0.0.1:8000

4、测试服务器能否访问
在浏览器输入上一步设定的IP和端口号,例如默认的:127.0.0.1:8000

到这里一个 Hello world 级别的原生 Django 项目算是搭建起来了。下一步就是配置了,但这属于具体的细节,不在本文主题范围内。
本文旨在让我们对 Django 有一个由抽象到具象的整体认识。
下一篇,我们会把目光聚焦在Django应用内部的配置,以及具体的业务操作上。
END
参考:
https://www.djangoproject.com/
https://djangobook.com/
https://yiyibooks.cn/xx/Django_1.11.6/intro/overview.html
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432012393132788f71e0edad4676a3f76ac7776f3a16000
https://www.cnblogs.com/Xjng/p/aa4dd23918359c6414d54e4b972e9081.html
Django:(01) 关于什么是Django?的更多相关文章
- 跟我一起Django - 01 安装和初始化
跟我一起Django - 01 安装和初始化 python环境 C:\Python27\Lib\site-packages>python --versionPython 2.7.5 安装setu ...
- Django 01 django基本介绍及环境搭建
Django 01 django基本介绍及环境搭建 #http服务器 #用来接收用户请求,并将请求转发给web应用框架进行处理 #Web应用框架 #处理完请求后在发送给http服务器,http服务器在 ...
- [Django 2]第一个django应用
1)增加应用 python3 manage.py startapp app-name 2. settings.py中,“INSTALLED_APPS”添加应用名称. 3. 在templates中新增网 ...
- 在django项目外,使用django.db链接数据库(postgres)
要用python链接到数据库,又不想写太多代码.想到了django,就偷懒了下.用django.db直连. django版本:1.6.5 (1.5以后可以用以下代码) #coding=utf-8 __ ...
- Django 源码小剖: Django 对象关系映射(ORM)
引 从前面已经知道, 一个 request 的到来和一个对应 response 的返回的流程, 数据处理和数据库离不开. 我们也经常在 views.py 的函数定义中与数据库打交道. django O ...
- Django教程:第一个Django应用程序(4)
Django教程:第一个Django应用程序(4) 2013-10-09 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 #博客: ...
- Django教程:第一个Django应用程序(3)
Django教程:第一个Django应用程序(3) 2013-10-08 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 #博客: ...
- Python之Django环境搭建(MAC+pycharm+Django++postgreSQL)
Python之Django环境搭建(MAC+pycharm+Django++postgreSQL) 转载请注明地址:http://www.cnblogs.com/funnyzpc/p/7828614. ...
- Django web框架开发基础-django实现留言板功能
1.创建项目 cmd django-admin startpoject cloudms 2.创建APP cmd django-admin startapp msgapp 3.修改settings,T ...
- Django的认证系统和Django admin的简单使用
Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Djang ...
随机推荐
- java 常用算法和一些题目
选择排序,复杂度O(n²) package com.example.demo; import org.junit.Test; /** * 选择排序 * @author zhzh.yin * */ pu ...
- ASP.Net用户控件的使用
一.概述: 与WEB窗体页相同,程序员可以使用任何文本编辑器创作用户控件,或者使用代码隐藏类开发用户控件.此外,与WEB窗体页一样,用户控件可以在第一次请求时被编译并存储在服务器内存中,从而缩短以后请 ...
- position:absolute 按钮左右分布:left:0 和 right:0 以及雪碧图
问题:把两个a标签按钮 垂直居中,并且分别把两个按钮放在水平左右两边顶部1,祖父元素设定:position:relative2,把.arrow 设定上下垂直居中 position:absolute; ...
- 用jackson的@JsonProperty注解属性名,会多出一个字段
遇见了这个情况,我的字段定义是xVal,yVal,用的lombok的@Data注解.然后查询到了下面这偏文章,https://bbs.csdn.net/topics/392305619,里面的回答是图 ...
- trie上构建后缀数组
例题: 往事太多,有时候忘了就忘了吧. 如果有非记不可的,就只能用点附加手段啦! 我们定义一棵往事树是一个 n 个点 n-1 条边的有向无环图,点编号为 1到 n,其中 1 号点被称为是根结点,除根结 ...
- scroll([[data],fn])
scroll([[data],fn]) 概述 当用户滚动指定的元素时,会发生 scroll 事件. scroll 事件适用于所有可滚动的元素和 window 对象(浏览器窗口).大理石平台支架 参数 ...
- 安装YII
吸收了其它php网站的搭建经验,没想到安装yii的时候还是状况频出 yii2 安装 http://www.yiichina.com/tutorial/324 1.下载了个yii2 advance的版本 ...
- windows日志分析工具-LogonTracer
0x01 Windows应急日志常用的几个事件ID 4624:这个事件ID表示成功登陆的用户,用来筛选该系统的用户登陆成功情况. 4625:这个事件ID表示登陆失败的用户. 4768:这个事件ID表示 ...
- *51nod 1409
https://blog.csdn.net/stay_accept/article/details/81476358 不懂啊 #include <map> #include <que ...
- 基于nodejs将mongodb的数据实时同步到elasticsearch
一.前言 因公司需要选用elasticsearch做全文检索,持久化存储选用的是mongodb,但是希望mongodb里面的数据发生改变可以实时同步到elasticsearch上,一开始主要使用ela ...