Django(一)
Django(一)
👉[Django官网](The web framework for perfectionists with deadlines | Django (djangoproject.com))
主流Web框架介绍
1.django框架
大而全,自带的功能组件非常非常非常的多!类似于航空母舰
2.flask框架
小而精,自身的功能组件非常非常非常的少!类似于游骑兵
但是第三方模块非常之多,如果把第三方模块全部叠加起来完全可以盖过django
有时候也会受限于第三方模块
ps:三行代码就可以启动一个flask后端服务
3.tornado框架
异步非阻塞 速度非常的快 快到可以开发游戏服务器
ps:Sanic、FastAPI...
# 框架分块和区别
A:socket部分
B:路由与视图匹配
C:模板语法
django
A:用的是wsgiref模块
B:用自己写的
C:用自己写的
flask
A:用的是wsgiref模块封装之后werkzeug
B:用自己写的
C:用jinja2模块
tornado
A、B、C都是自己写的
MVC 与 MTV模型
MVC 模型
MVC 模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
MVC 以一种插件式的、松耦合的方式连接在一起。
- 模型(M)- 编写程序应有的功能,负责业务对象与数据库的映射(ORM)。
- 视图(V)- 图形界面,负责与用户的交互(页面)。
- 控制器(C)- 负责转发请求,对请求进行处理。
MTV 模型
Django 的 MTV 模式本质上和 MVC 是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django 的 MTV 分别是指:
- M 表示模型(Model):编写程序应有的功能,负责业务对象与数据库的映射(ORM)。
- T 表示模板 (Template):负责如何把页面(html)展示给用户。
- V 表示视图(View):负责业务逻辑,并在适当时候调用 Model和 Template。
除了以上三层之外,还需要一个 URL 分发器,它的作用是将一个个 URL 的页面请求分发给不同的 View 处理,View 再调用相应的 Model 和 Template,MTV 的响应模式如下所示:
解析:
用户通过浏览器向我们的服务器发起一个请求(request),这个请求会去访问视图函数:
a.如果不涉及到数据调用,那么这个时候视图函数直接返回一个模板也就是一个网页给用户。
b.如果涉及到数据调用,那么视图函数调用模型,模型去数据库查找数据,然后逐级返回。
视图函数把返回的数据填充到模板中空格中,最后返回网页给用户
参考:runoob
安装与下载
👉下载 Django |Django (djangoproject.com)
- 计算机名称不能有中文
- 项目名和py文件名最好也不要使用中文
- django版本兼容问题:主要有1.X、2.X、3.X
下载
pip3 install django==[版本号]
- pycharm下载
- !!!注意下载带LTS(长期支持版本)的!!!
测试
django-admin
项目的创建和启动
命令行模式
django-admin startproject 项目名
启动项目
命令行模式
1.创建django项目
django-admin startproject mysite1
2.启动项目名
切换到manage.py入口文件所在目录:cd Django_items\mysite1
启动的三种方式:
2.1 python manage.py runserver
2.2 python manage.py runserver ip:port
2.3 python manage.py runserver port
# ip本机,端口自定义,不写Django默认端口8000
pycharm创建
启动
如果没有启动按钮,那么就点击:
结果都是一样可以启动的
命令行创建和pycharm创建的区别
-
pycharm创建:自动生成templates文件夹
- settings.py文件中自动拼接了路径
- 命令行创建:没有templates文件夹
- settings.py文件没有拼接路径
ps:Django2/3.X版本拼接模板文件路径用的是[BASE_DIR / 'templates']
,如果路径不能用/
拼接修改成[os.path.join(BASE_DIR, 'templates')]
;如果使用cmd创建需要添加模板文件的路径,且注意Django版本
创建应用(app)
一个项目至少含有一个应用!
命令行模式:
python manage.py startapp 应用名
E:\Django_items\djangoProject1>python manage.py startapp app01
pycharm创建
Tools => run manage.py task
或
创建项目的时候可以快捷创建一个!
startapp 应用名
manage.py@djangoProject1 > startapp app03
创建完应用要去配置文件注册
如果在创建应用的时候创建的项目,pycharm自动给注册了
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
'app02'
]
主要文件介绍
mysite1 # 项目名
app01 # 应用名
migrations # 迁移数据库的时候,会把迁移记录保存到这里来
__init__.py
admin.py # django自带的后台管理系统
apps.py # 忽略
models.py # 模型层,以后跟数据库相关的都在这个里面
tests.py # 测试脚本
views.py # view层,主要用来写逻辑的
mysite1
__init__.py
settings.py # 整个django项目的全局配置文件
urls.py # 路由层,写的是路径与函数的对应关系
wsgi.py # wsgiref服务器, WSGI协议,uwsgi服务器
templates # 写html页面的地方
db.sqlite3 # django自带的小型数据库, mysql,oracle
manage.py # 启动文件,入口文件
“三板斧”
from django.shortcuts import render,HttpResponse,redirect
# 通过urls.py
1.HttpResponse
返回字符串
2.render
返回html页面,还可以使用模板语法
3.redirect
重定向
“三板斧本质”
部分源码
django视图函数必须要返回一个HttpResponse对象
class HttpResponse(HttpResponseBase):
"""
An HTTP response class with a string as content.
This content that can be read, appended to or replaced.
"""
streaming = False
def __init__(self, content=b'', *args, **kwargs):
super(HttpResponse, self).__init__(*args, **kwargs)
# Content is a bytestring. See the `content` property methods.
self.content = content
def render(request, template_name, context=None, content_type=None, status=None, using=None):
"""
Returns a HttpResponse whose content is filled with the result of calling
django.template.loader.render_to_string() with the passed arguments.
"""
content = loader.render_to_string(template_name, context, request, using=using)
return HttpResponse(content, content_type, status)
redirect内部是继承了HttpRespone类