框架与架构

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类似,支持过滤器。

五、WEB框架基础(1)的更多相关文章

  1. 五、Web框架基础(2)

    Tornado 异步协程编程.(其实是异步IO而非真正的异步,从内核拷贝到用户空间的过程还是同步的) 适合用户量大.高并发,如抢票.网页游戏.在线聊天等场景:或大量HTTP持久连接,通过单TCP持久连 ...

  2. Python-S9-Day115——Flask Web框架基础

    01 今日内容概要 02 内容回顾 03 Flask框架:配置文件导入原理 04 Flask框架:配置文件使用 05 Flask框架:路由系统 06 Flask框架:请求和响应相关 07 示例:学生管 ...

  3. python 学习笔记十五 web框架

    python Web程序 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. Python的WEB框架分为两类: 自己写socket,自 ...

  4. 五. web开发基础

    一.HTML 二.CSS 三.JavaScript 四.web框架 1.web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端 ...

  5. WEB框架概述(译)

    在学习WEB框架之前,我个人觉得需要搞清楚一件事:什么是WEB框架?在网上找了很多资料,觉得什么是WEB框架这篇文章讲的比较全面而清晰,本文作者Jeff Knupp. 全文如下: Web 应用框架,或 ...

  6. 【译】什么是 web 框架?

    Web 应用框架,或者简单的说是“Web 框架”,其实是建立 web 应用的一种方式.从简单的博客系统到复杂的富 AJAX 应用,web 上每个页面都是通过写代码来生成的.我发现很多人都热衷于学习 w ...

  7. WEB框架-Django框架学习-预备知识

    今日份整理,终于开始整个阶段学习的后期了,今日开始学习Django的框架,加油,你是最胖的! 1.web基础知识 1.1 web应用 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是 ...

  8. Python开发【第十五篇】:Web框架之Tornado

    概述 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了 ...

  9. Python开发【第十八篇】Web框架之Django【基础篇】

    一.简介 Python下有许多款不同的 Web 框架,Django 是重量级选手中最有代表性的一位,许多成功的网站和APP都基于 Django. Django 是一个开放源代码的Web应用框架,由 P ...

随机推荐

  1. java面试题之为什么hashmap的数组初始化大小都是2的N次方?

    当数组长度为2的N次方时,不同的key算出的index相同的几率小,数据在数组上分配均匀,hash碰撞的几率小,提升查询效率,从大O(N)提升至O(1):

  2. ace模板dataTables_length控制是否显示分页

    默认的ace中配置的是7列之后才显示分页的,其实是可控的,如下: aoColumns这个参数的含义: 排序控制 $(document).ready(function() {$('#example'). ...

  3. 手动创建DataTable并绑定gridview

    原文发布时间为:2008-08-04 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...

  4. 52深入理解C指针之---不透明指针

    该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教.一.size_t:用于安全表示长度,所有平台和系统都会解析成自己对应的长度 1.定义:s ...

  5. react-highcharts

    import ReactHighcharts from'react-highcharts'; class SummaryLeft extends Component { render () {var ...

  6. [react-router] 平时积累

    path通配符: <Route path="/hello/:name"> // 匹配 /hello/michael // 匹配 /hello/ryan <Rout ...

  7. shell - sed 简单使用记录

    时间长不用,总是会忘掉的........还是烂笔头好些. sed 命令使用帮助及实操举例 功能:主要用来对一个或多个文件进行编辑,简化对文件的反复操作. 语法: sed [-hnV] [-e<s ...

  8. Codeforces 622C Not Equal on a Segment 【线段树 Or DP】

    题目链接: http://codeforces.com/problemset/problem/622/C 题意: 给定序列,若干查询,每个查询给定区间和t,输出区间内任意一个不等于t的元素的位置. 分 ...

  9. Swoole RPC 的实现

    目录 概述 实现效果 代码 小结 概述 这是关于 Swoole 学习的第七篇文章:Swoole RPC 的实现. 第六篇:Swoole 整合成一个小框架 第五篇:Swoole 多协议 多端口 的应用 ...

  10. android应用无法接收到广播?

    本篇文章记录Android应用无法接收到广播的几种case 1. 没有register 广播其实是一种订阅者模式,所以当然需要先register,register的方式有两种 1.1  through ...