python三大主流web框架:
1. Django:大而全,自带了很多功能模块,类似于航空母舰 (缺点:有点笨重)
2. Flask:短小精悍,自带的功能模块特别少,大部分都是依赖于第三方模块(小而轻)
3. Tornado:异步非阻塞 主要用在处理高io 多路复用的情况 可以写游戏后端
在使用Django框架开发web应用程序时,开发阶段同样依赖wsgiref模块来实现Server的功能,我们使用Django框架是为了快速地开发application
a:socket / b:路由与视图函数 / c:模板渲染
Django:
a用的别人的 wsgiref
b自己写的
c自己写的
Flask:
a用的别人的 werkzeug
b自己写的
c用的别人的 jinja2
Tornado:
a,b,c都是自己写的
安装
目前在企业开发中Django框架使用的主流版本为1.11.x版本,最新版本为2.x,这里主要了解1.11版本,同时会涉及2.x的新特性
pip3 install django==1.11.18 # 在命令行执行该命令
使用
使用Django注意事项:
1.计算机的名称不能有中文
2.一个pycharm窗口就是一个项目,不要多个项目放在一个窗口里面
3.项目名不能起中文
快速创建并启动Django项目:
如果使用的是我们自定义的框架来开发web应用,需要事先生成框架包含的一系列基础文件,然后在此基础上进行开发。
如果使用的是Django框架来开发web应用,同样需要事先生成Django框架包含的一系列基础文件,然后在此基础上进行开发。
但Django框架更为方便的地方在于它已经为我们提供了一系列命令来帮我们快速地生成这一系列基础文件
- 1.命令行创建:
创建django项目:
# 在命令行执行以下指令,会在当前目录生成一个名为mysite的文件夹,该文件夹中包含Django框架的一系列基础文件
django-admin startproject 项目名
创建app应用(在项目名下):
python manage.py startapp app01
django-admin startapp app01
# 创建功能模块app01,此处的startapp代表创建application下的一个功能模块。例如我们要开发application是京东商城,京东商城这个大项目下有一个订单管理模块,我们可以将其命名为app01
启动django项目:
python3 manage.py runserver
# 在浏览器输入:http://127.0.0.1:8001 会看到Django的欢迎页面。
注意 : 用命令行创建django默认不会自动创建templates文件夹需要你手动自己创建(注意该文件夹路径是否被添加配置文件中) Ctrl+c 停止运行
- 2.pycharm创建:
FILE >>> new project 选择第二个django 需要注意名字不能有中文,选择本地的解释器,勾选后台管理
创建app
pycharm命令行创建
python3 manage.py startapp 应用名
Tools下面run manage task功能栏
startapp 应用名
启动点小绿色箭头
Django项目目录结构
mysite(项目名) # 文件夹
├── app01 # 文件夹
│ └── migrations # 文件夹 数据库迁移记录相关数据
│ └── admin.py # django后台管理相关
│ └── apps.py # 应用注册相关
│ └── models.py # 模型表相关
│ └── tests.py # 测试文件
│ └── views.py # 视图函数相关
├── mysite # 文件夹
│ └── settings.py # 全局配置信息
│ └── urls.py # 总路由,请求地址跟视图函数的映射关系
│ └── wsgi.py
└── templates # 文件夹 项目用到的所有的html文件
├── manage.py # 项目入口,执行一些命令
Django框架的分层与请求生命周期
我们使用Django框架就是为了开发application,而application的工作过程本质就是根据不同的请求返回不同的数据,Django框架将这个工作过程细分为如下四层去实现
1、路由层 urls.py
(根据不同的地址执行不同的视图函数,详见https://blog.csdn.net/Waller_/article/details/104169513)
2、视图层 views.py
(定义处理业务逻辑的视图函数,详见https://blog.csdn.net/Waller_/article/details/104181393)
3、模型层 models.py
(跟数据库打交道的,详见 https://blog.csdn.net/Waller_/article/details/104207695)
4、模板层 templates
(待返回给浏览器的html文件,详见https://blog.csdn.net/Waller_/article/details/104198069)
这体现了一种解耦合的思想
基于Django实现的一个简单示例
- url.py
from django.contrib import admin
from django.conf.urls import url
#导入views模块
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
# r'^index/$' 会正则匹配url地址的路径部分
url(r'^index/$',views.index), # 新增地址http://127.0.0.1:8001/index/与index函数的映射关系
]
- views.py
from django.shortcuts import render
# 必须定义一个request形参,request相当于我们自定义框架时的environ参数
def index(request):
import datetime
now=datetime.datetime.now()
ctime=now.strftime("%Y-%m-%d %X")
return render(request,"index.html",{"ctime":ctime}) # render会读取templates目录下的index.html文件的内容并且用字典中的ctime的值替换模版中
- templates
在templates目录下新建文件index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h4>当前时间:{{ ctime }}</h4>
</body>
</html>
测试:
python manage.py runserver 8001
# 在浏览器输入:http://127.0.0.1:8001/index/ 会看到当前时间。