框架与架构

Python语言有很多web框架,主要是四个,企业级框架Django,高并发处理框架Tornado,快速开发框架Flask,自定义协议框架Twisted。

全栈网络框架封装了网络通信/线程、HTTP栈、数据库读写、HTML模板等功能,但是Twisted框架专注网络底层协议开发,不提供模板引擎,因此Twisted并不算是全栈框架。

Django功能强大完全,但封闭。

Tornado异步协程高并发。

Flask小而精。

Twisted事件驱动框架。

架构

早期的网络服务器提供的都是静态资源,但随着网络技术的发展,动态资源逐渐占据主流,而针对动态资源的生成与用户输入的关系,出现了很多设计架构。

通用架构MVC,即模型层、视图层、控制层,MVC架构+数据库就是我们统称的Web应用。

用户接收View,用户输入传到Controller中,而数据经Controller封装分发到对应路由也就是Model层进行进一步处理。


Web服务器

框架在Web开发中,属于后端应用,而后端由服务器,应用,数据库这三大部分组成。

WSGI接口

这个接口本身也是一个服务器,相当于为应用设置了监听IP与端口,但它是对应用的封装,使得Web服务器可以直接调用这个接口来连接后端应用,而不是针对不同的后端应用开发不同的接口,总而言之就是统一了规范。

WSGI相当于连接Web服务器与服务器应用,其中Web服务器与WSGI连接的接口又有uwsgi和fastcgi之分,不过常用的还是uwsgi(是WSGI在Linux下的实现)。

WSGI本身也可作为服务器运行,但性能较差,一般作测试用。

服务器

常见的Web服务器有Nginx、Tomcat、Apache,但Nginx是python在Linux下首选的服务器之一。

所以结合WSGI接口,常规的Web服务器组成为Linux、Nginx、uwsgi。


Django框架

Django框架主要分为模型层、视图层、表单、管理站点。

细分为管理工具、Model、View、Template、Form、Admin。

管理工具

# 创建项目
django-admin startproject [project]

# 创建应用
django-admin startapp [app]

项目创建后,生成一个项目名包和一个单独的manage.py文件,此文件是管理项目的工具,项目名包中包含配置文件、路由映射、wsgi接口。

应用创建后,生成迁移包和admin管理声明文件、apps应用信息定义文件、models模型层文件、views视图层文件、tests测试文件。

views视图层

views.py就是MVC中的View层,负责进一步处理数据+生成页面数据。

# 渲染页面
from django.http import HttpResponse
from django.template import loader
template = loader.get_template('polls/index.html')
context = {
        'latest_question_list': latest_question_list,
    }
return HttpResponse(template.render(context, request))

# 改进的渲染页面
from django.shortcuts import render
return render(request, 'polls/index.html', context)

# 更进一步的改进
class IndexView(generic.ListView):
    template_name = 'polls/index.html'
    context_object_name = 'latest_question_list'

    def get_queryset(self): # 重载该方法,用于提供模板需要的对象
        return Question.objects.order_by('-pub_date')[:5]

# 重定向页面
from django.http import HttpResponseRedirect
from django.urls import reverse
return HttpResponseRedirect(reverse('polls:results', args=(question_id,)))

models模型层

通过ORM建立表模型,对View层提供访问数据库的功能,所有对数据库数据的操作都在这一层完成。

没有自动创建的文件的Controller控制层

urls.py,用于将请求分发到指定的views路由函数中,属于Controller层,但在Django中没有指定Controller的文件。

对于app的urls,使用直接映射;对于project的urls,使用分布式映射(include)。

from django.conf.urls import url

from . import views

app_name = 'polls'
urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'),
    url(r'^(?P<pk>[0-9]+)/results/$', views.ResultsView.as_view(), name='results'),
    url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name='vote'), # 这一行就是直接映射,前三行是规范化后的直接映射
]

forms.py,用于对Form表单建立对应类,由views进行引用,也属于Controller层的定义。

admin管理层

这个是便于数据管理,基本每个框架都提供该功能,不在MVC架构范围内。

将之前models层建立的模型导入到admin.py文件中,调用admin.site.register()方法注册,即可用于管理。

管理页面为domain/admin,建立管理员用户账号使用python manage.py createsuperuser命令。

模板

属于视图层,语法与jinja2类似,支持过滤器。

最新文章

  1. awk神器
  2. 无法删除对象 &#39;产品&#39;,因为该对象正由一个 FOREIGN KEY 约束引用。
  3. 拾取模型的原理及其在THREE.JS中的代码实现
  4. 0506--Scrum项目1.0
  5. Java-maven异常-cannot be cast to javax.servlet.Filter 报错, 原因servlet-api.jar冲突
  6. 【结构型】Adapter模式
  7. 转摘--如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等
  8. 如何在一个jpg图片上面叠加文字
  9. n每个计数的概率和发生骰子--动态规划
  10. oc汉子转拼音
  11. POJ - 2336 Wireless Network
  12. 正则表达式过滤HTML、JS、CSS
  13. 微信小程序中样式问题
  14. VBA批量导入图片到多Word文档并加标题(会飞的鱼)
  15. 从零开始一起学习SLAM | 掌握g2o顶点编程套路
  16. 用Python实现一个词频统计(词云+图)
  17. 搭建iview环境
  18. Docker 容器备份例子
  19. 个人作业Week2-代码复审(修改明确了要求)
  20. git 新建本地分支后将本地分支推送到远程库, 使用git pull 或者 git push 的时候报错

热门文章

  1. CentOS7 Failed to start iptables.解决方法
  2. Foj 2148 二维几何(点是否在三角形内)
  3. 洛谷P1101 单词方阵
  4. ng-include
  5. hdu 4514(树的直径+并查集)
  6. 模块化开发(seajs)
  7. 第4章 使用 Spring Boot
  8. Extjs Ext.grid.column.Column 自适应内容
  9. linux mysql添加用户名并实现远程访问
  10. mybatis学习网站