###############    MVC架构介绍    ################

# MVC架构
# 一个软件框架有很多的模块,每一个模块有不同的功能
# 模块与模块之间相互配合来完成软件开发,
# django遵循的是MVC的框架思想
# MVC的产生理念:分工。就是让专门的人做专门的事,
# MVC的核心是:解耦,也就是一个模块和其他模块之间只是配合关联性不大,你升级一个模块只要能完成功能,对其他模块影响不大
# M:model,模型,和数据库进行交互
# V:view,视图,产生html页面
# C:controller,控制器,接收请求,进行处理,
######################################
# 举例说明,MVC三个是怎么工作的
# 浏览器,用户注册的时候,提交用户名密码
# C:控制器,接收数据,进行处理,与M和V进行交互
# C不会自己直接保存数据到数据库,是通过M将用户名和密码保存到数据库,然后M拿到数据之后返回给C,
# 如果需要产生页面,C不会自己产生页面,而是通过V产生HTML页面,然后V返回html页面给到C,
# 最后C,把数据和html页面返回给浏览器

###############    django框架-MVT    ################

# django框架
# django是python里面一个遵循MVC的一个框架,但是他有自己的一个名字,叫做MVT,但是本质上还是遵循MVC分工的一个思想的
# M:model,模型,和MVC中的M功能一样,是和数据进行交互,
# V:view,视图,和MVC中的C功能一样,接收数据,进行处理,和M和T进行交互,然后返回数据,
# T:templates,模型,和MVC中的V功能一样,就是产生HTML页面,
# 举例说明:
# 浏览器,用户注册,提交用户名和密码
# 这个django没有C的,那么怎么运行的,是通过视图来接收数据的,
# 通过M把数据保存到数据库,然后返回到视图V,
# 然后不是通过V产生html页面了,是通过T模板来产生HTML页面的,然后交给到视图V,
# 最后V把数据和页面,返回给浏览器,
####################
# django的文档一定要多看:https://yiyibooks.cn/xx/Django_1.11.6/index.html

###############    django安装,项目创建,app创建配置,项目启动    ################

# 首先是安装Django:
# 进入pycharm的Terminal中,或者进入cmd中,
pip install django==1.11.11 -i https://pypi.tuna.tsinghua.edu.cn/simple
Django - admin # 安装之后继续输入Django - admin,出现内容就说明安装成功了
python -m django --version # 继续输入,可以实现查看Django版本 # 创建第一个Django项目:
# 第一种:可以使用pycharm创建,创建项目的时候选择django,
# 第二种:命令创建,
# 首先你想要把项目创建到哪一个目录,然后进入目录,执行命令:
django-admin startproject test1 #(项目名) # 项目目录分析:
manage.py # 项目的管理文件,通过这个文件可以管理整个django项目
test1
__init__.py # 表示test1这是一个python的包
settings.py # 项目的配置
url.py # 路由的配置
wsgi.py # web服务器和django交互的一个入口 # 创建一个应用:
python manage.py startapp app名字
# 文件目录分析
admin.py # 这和网站的后台管理相关的文件
__init__.py
migirations
__init__.py
model.py #数据库相关的内容
views.py # 接受请求,进行梳理,和M和T进行交互
test.py # 写测试代码的文件
# 还需要对应用进行注册:
# 在settings中的INSTALLED_APPS,加上app的名字 # 启动服务, 在cmd先进入项目路径,或者在pytcharm中的terminal中
#执行命令:
python manage.py runserver
# 或者直接在pycharm中点击运行按钮启动,

##############################################

"""
简述Django请求生命周期 一般是用户通过浏览器向我们的服务器发起一个请求(request),这个请求会去访问视图函数,
(如果不涉及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户),视图函数调用模型,模型去数据库查找数据,
然后逐级返回,视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。 #1.wsgi,请求封装后交给web框架 (Flask、Django)
WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口。他就是socket服务端,用于接收用户请求并将请求进行初次封装,然后将请求交给web框架
#2.中间件,对请求进行校验或在请求对象中添加其他相关数据,例如:csrf、request.session -
#3.路由匹配 根据浏览器发送的不同url去匹配不同的视图函数
#4.视图函数,在视图函数中进行业务逻辑的处理,可能涉及到:orm、templates => 渲染 -
#5.中间件,对响应的数据进行处理。 注意返回的时候没有经过路由系统,
#6.wsgi,将响应的内容发送给浏览器。 """

 ########################################

web框架的本质是什么?
本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。

 ########################################

WSGI / uwsgi/ uWSGI区分

WSGI
WSGI的全称是Web Server Gateway Interface(Web服务器网关接口),
它不是服务器、python模块、框架、API或者任何软件,
只是一种描述web服务器(如nginx,uWSGI等服务器)如何与web应用程序(如用Django、Flask框架写的程序)通信的规范。
server和application的规范在PEP3333中有具体描述,要实现WSGI协议,必须同时实现web server和web application,
当前运行在WSGI协议之上的web框架有Bottle, Flask, Django。
uWSGI
uWSGI是一个全功能的HTTP服务器,实现了WSGI协议、uwsgi协议、http协议等。
它要做的就是把HTTP协议转化成语言支持的网络协议。比如把HTTP协议转化成WSGI协议,让Python可以直接使用。
uwsgi
与WSGI一样,是uWSGI服务器的独占通信协议,用于定义传输信息的类型(type of information)。
每一个uwsgi packet前4byte为传输信息类型的描述,与WSGI协议是两种东西,据说该协议是fcgi【FCGI:fast common gateway interface 快速通用网关接口协议的10倍快。

 ########################################

Django 本身提供了 runserver,为什么不能用来部署? 
runserver 方法是调试 Django 时经常用到的运行方式,它使用 Django 自带的  WSGI Server 运行,主要在测试和开发中使用,并且 runserver 开启的方式也是单进程 。 
uWSGI 是一个 Web 服务器,它实现了 WSGI 协议、uwsgi、http 等协议。注意 uwsgi 是一种通信协议,而 uWSGI 是实现 uwsgi 协议和 WSGI 协议的 Web 服务器。
uWSGI 具有超快的性能、低内存占用和多 app 管理等优点,并且搭配着 Nginx  就是一个生产环境了,能够将用户访问请求与应用 app 隔离开,实现真正的部署 。
相比来讲,支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能。

 ########################################

 ########################################

 ########################################

 ########################################

django框架基础-框架介绍-长期维护的更多相关文章

  1. django框架基础-ORM进阶-长期维护

    ###############    ORM进阶---contenttype    ################ 设计思路: """ 路飞有两种课,专题课和学位课, ...

  2. django框架基础-视图系统-长期维护

    ##################   什么是视图?     ####################### 视图: 1,一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受W ...

  3. django框架基础-路由系统-长期维护

    ##################   路由系统介绍    ####################### 路由系统就是路径和函数的对应关系, 路由系统可以看成支撑你这个网站的目录,就像是一本书一样 ...

  4. ABP VNext框架基础知识介绍(1)--框架基础类继承关系

    在我较早的时候,就开始研究和介绍ABP框架,ABP框架相对一些其他的框架,它整合了很多.net core的新技术和相关应用场景,虽然最早开始ABP框架是基于.net framework,后来也全部转向 ...

  5. rest framework-restful介绍-长期维护

    ###############   django框架-rest framework    ############### # django rest framework 框架 # 为什么学习这个res ...

  6. django框架进阶-使用缓存-长期维护

    ###############   django-缓存页面    ############### ########################################### # 全站缓存, ...

  7. django框架进阶-ModelForm组件-长期维护

    ############################################################ """ 通常在Django项目中,我们编写的大部 ...

  8. django框架进阶-form组件-长期维护

    ##################     form组件做了什么事情?      ####################### 之前web开发的模式,以注册为例 1,要有一个注册页面,然后有一个f ...

  9. ABP VNext框架基础知识介绍(2)--微服务的网关

    ABP VNext框架如果不考虑在微服务上的应用,也就是开发单体应用解决方案,虽然也是模块化开发,但其集成使用的难度会降低一个层级,不过ABP VNext和ABP框架一样,基础内容都会设计很多内容,如 ...

随机推荐

  1. 关于阿里云的远程连接和轻型桌面(xfce4)安装

    这里用的阿里云服务器是轻量应用服务器 先通过网页端的远程连接进入服务器,然后 安装xfce4 (1)先安装更新:apt-get update. (2)安装xrdp:输入apt-get install ...

  2. javaweb03 javaservlet基础一

    1.使用JavaEE版的eclipse开发动态的WEB工程(JavaWEB 项目)1).把开发选项切换到JavaEE2).可以在window -> Show View 中找到Package Ex ...

  3. C语言-指针到底是什么?

    1.指针到底是什么?(1).指针变量与普通变量的区别 指针的实质就是一个变量,他跟普通变量没有任何本质区别.指针完整的名字应该叫做指针变量,简称为指针.2.为什么需要指针?(1).指针的出现是为了实现 ...

  4. 对Java面向对象中多态的理解

    理解的要点:多态意味着父亲的变量可以指向子类对象 面向对象程序设计的三大支柱是封装.继承和多态 封装对外把相应的属性和方法实现的细节进行了隐藏.继承关系使一个子类继承父亲的特征,并且加上了一些新的特征 ...

  5. 编写shell脚本,使用 nohup 让springboot 项目在后台持续运行

    1.将springboot项目打成jar放在linux的某个目录下. 2.新建一个nohup.log文件. 3.使用vi命令新建一个start.sh文件并写下以下内容: #!/bin/sh nohup ...

  6. Webstorm、Idea双击shift弹出框解决办法

    1.Ctrl + Shift + A,输入registry 2.在弹出的记录表中,向下滚动到**“ide.suppress.double.click.handler”**并选中复选框,然后close关 ...

  7. POJ 1655 Balancing Act【树的重心模板题】

    传送门:http://poj.org/problem?id=1655 题意:有T组数据,求出每组数据所构成的树的重心,输出这个树的重心的编号,并且输出重心删除后得到的最大子树的节点个数,如果个数相同, ...

  8. 用数组来实现Stack

    1:Stack特点 stack:栈,是一种特殊的数据结构,有着先入后出的特点(first in last out).stack中栈底始终不变,只有一端能变化.栈顶在有数据push的时候增大,有数据po ...

  9. Python验证6174猜想

    num=int(input()) c=num while c!=6174:     digits=list(str(c))     digits.sort(reverse=True)#排列最大数和最小 ...

  10. vector内部实现2

    push_back 往动态数组的内部进行添加数据 pop_back 往动态数组的尾部进行删除数据 resize  讲元素的数量len改成num个数量  如果size()变大了,多出来的将用默认构造来创 ...