Django是米国一个新闻公司开源的一个python后端框架,名字好像是源自于比利时的一个音乐家,现在和Flask,Tornado都是python后端流行的框架。
Django与前面的Flask对比:
Django:大而全,入门简单,开发效率高,python最流行web框架,类似精装房
Flask:轻量级,定制化程度更高,适合高手,类似毛坯房
Django特点:
1.提供创建项目工程的自动化工具
2.数据库ORM支持
3.模板
4.表单
5.Admin管理站点支持
6.文件管理
7.认证权限
8.session机制
9.缓存
创建Django工程
1.创建虚拟环境
1.1 virtualenv创建虚拟环境
1.1 virtualenvwrapper创建虚拟环境
1.1 python 自带的venv创建虚拟环境
python -m venv 虚拟环境名
2.安装Django
2.1 进入到虚拟环境: source xxx/activate激活
2.2 pip install -i https://pypi.douban.com/simple Django(不推荐用命令行,直接用pycharn)
3.创建项目
django-admin startproject 项目名
4.pycharm打开项目
manage.py:以多种方式与django项目交互的命令行工具
learnDjango/:与项目根目录同名,项目相关的包
learDjango/settings.py:项目全局配置文件
learnDjango/urls.py:声明的全局url路由表
learnDiango/wsgi.py:兼容WSGI协议的web服务器入口文件
5.运行项目
python manage.py runserver (python manage.py runserver ip:port)
打开页面:
修改语言与时区
在全局配置文件settings中修改
效果:
6.创建子应用
创建子应用后,配置运行器:
vue中将不同的模块称为组件,Django中将不同的模块可称为子应用。
为什么要将项目拆分成不同的子应用?
1.业务功能模块可以复用。
2.工程项目拆分成不同的功能模块,以子应用的形式存在。
3.各功能模块可以保持相互独立,解耦。
4.可以将模块代码整体复制使用。
6.1创建子应用
python manage.py startapp 子应用名
python manage.py startapp projects
子应用结构:
migrations/ 存放数据库迁移历史记录的目录
admin.py 跟网站的后台管理站点配置相关的文件(django自动创建admin 后台)
apps.py: 应用配置,当前子应用配置相关信息文件
models.py: 存放数据库模型,所有和数据库交互的都放在models.py中,类似vue中的M
tests.py: 单元测试文件
views.py:类似vue组件中<script></script>标签包裹的部分,所有和数据库交互的操
作,所有返回给用户的操作,都定义在views.py中,用于编写web应用视图
6.2注册
在全局配置文件settings.py中的INSTALLED_APPS列表添加子应用
格式: 子应用名.apps.子应用名(大驼峰)Config
6.3创建视图
在projects/views.py中添加视图(行参为request)
from django.http import HttpResponse
# Create your views here.
def index(request):
"index视图"
return HttpResponse("<h1>Hello,大佬们!</h1>")
# 1.创建视图
# 2.将视图路由添加到全局路由中
在全局urls.py路由管理的urlpatterns中添加路由
运行项目后前端访问
可以看到,提示我们项目有2条路由,第2条为我们创建的路由,访问2条路由
前端访问url时程序处理流程:
1.前端输入ip:port/projects/index,发送请求到后端服务;
2.后端服务根据url:/projects/index从上到下匹配全局路由表中的路由信息;
3.匹配不到则默认返回404;匹配到了则调用该匹配路由后面的index视图函数;
4.调用index视图函数时,进入视图函数,视图函数最后return了一个
HttpResponse("<h1>Hello,大佬们!</h1>")html给前端展示。
6.4添加路由(配置子路由推荐)
6.4.1在子应用创建projects/urls.py子路由文件
# 定义子路由
# 1.导入path函数
from django.urls import path
# 先导入要添加路由的视图再配置路由
from projects.views import index
# from .views import index (效果同上)
urlpatterns = [
path('', index),
]
6.4.2在全局路由learnDjango/urls.py文件中添加加载子路由信息
全局路由配置:
1.urlpatterns为固定名称的列表
2.列表中的一个元素,就代表一条路由
3.从上到下匹配,能匹配上Django会调用后面的视图函数,如果匹配不上,
Django会导入和调用path函数第二个参数指定的视图或者去子路由中匹配
4.如果匹配不上,会自动抛出一个404异常(默认为404页面,状态码为404)
from django.contrib import admin
from django.urls import path
# 跟子路由关联,需要用include函数
from django.urls import include
urlpatterns = [
path('admin/', admin.site.urls),
# include提示去子应用projects里的urls.py文件中匹配
path('projects/index', include('projects.urls'))
]
"""
配置子路由后,处理流程:
1。现在主路由中从上往下匹配
2.匹配到projects/index时,看到include,表示去子路由中再匹配
3。进入子路由表,如果path()中路径为空,则表示就是此路由,匹配到了执行视图函数
"""
效果: