五、WEB框架基础(1)
框架与架构
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)的更多相关文章
- 五、Web框架基础(2)
Tornado 异步协程编程.(其实是异步IO而非真正的异步,从内核拷贝到用户空间的过程还是同步的) 适合用户量大.高并发,如抢票.网页游戏.在线聊天等场景:或大量HTTP持久连接,通过单TCP持久连 ...
- Python-S9-Day115——Flask Web框架基础
01 今日内容概要 02 内容回顾 03 Flask框架:配置文件导入原理 04 Flask框架:配置文件使用 05 Flask框架:路由系统 06 Flask框架:请求和响应相关 07 示例:学生管 ...
- python 学习笔记十五 web框架
python Web程序 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. Python的WEB框架分为两类: 自己写socket,自 ...
- 五. web开发基础
一.HTML 二.CSS 三.JavaScript 四.web框架 1.web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端 ...
- WEB框架概述(译)
在学习WEB框架之前,我个人觉得需要搞清楚一件事:什么是WEB框架?在网上找了很多资料,觉得什么是WEB框架这篇文章讲的比较全面而清晰,本文作者Jeff Knupp. 全文如下: Web 应用框架,或 ...
- 【译】什么是 web 框架?
Web 应用框架,或者简单的说是“Web 框架”,其实是建立 web 应用的一种方式.从简单的博客系统到复杂的富 AJAX 应用,web 上每个页面都是通过写代码来生成的.我发现很多人都热衷于学习 w ...
- WEB框架-Django框架学习-预备知识
今日份整理,终于开始整个阶段学习的后期了,今日开始学习Django的框架,加油,你是最胖的! 1.web基础知识 1.1 web应用 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是 ...
- Python开发【第十五篇】:Web框架之Tornado
概述 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了 ...
- Python开发【第十八篇】Web框架之Django【基础篇】
一.简介 Python下有许多款不同的 Web 框架,Django 是重量级选手中最有代表性的一位,许多成功的网站和APP都基于 Django. Django 是一个开放源代码的Web应用框架,由 P ...
随机推荐
- Microsoft IIs tilde directory enumeration
漏洞标题: iis 短文件名列举漏洞 检测: https://code.google.com/p/iis-shortname-scanner-poc/ 查看扫描出来的目录,全是404 ,比 ...
- JDK7的maven项目切换到JDK8全纪录
今天花了一个下午的时间,将一个之前用JDK7写的web项目升级到了JDK8,这个过程中遇到了许多麻烦,在这里简单的记录一下,方便日后查看. 1.下载JDK8并且配置,这个我就不说了,反正大家都知道,需 ...
- 用Vue创建一个新的项目
vue的安装 Vue.js不支持IE8及以下版本.因为Vue.js使用了ECMAScript5特性,IE8显然不能模拟.Vue.js支持所有兼容ECMAScript5的浏览器. 在用Vue.js构建大 ...
- 应用express mockjs模拟前端json数据接口
一.首先需要在项目安装express 1.cnpm install express --save-dev 2.cnpm install mockjs --save-dev 二.在项目根目录下新建pr ...
- 【MFC】定时器的使用(转)
原文转自 http://blog.csdn.net/hellozhd/article/details/8213359 在对话框中使用定时器: 1.定义定时器 #define TIMER1 1 2.开启 ...
- hdu 1077(单位圆覆盖问题)
Catching Fish Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- hdu 5455(字符串处理)
Fang Fang Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total S ...
- LeetCode OJ--Merge Two Sorted Lists
http://oj.leetcode.com/problems/merge-two-sorted-lists/ 有序链表的归并排序 #include <iostream> using na ...
- 关于xcode 9.0数组问题的遇到的坑
1.最近一直在忙着做项目,今天就来总结最近这段时间遇到的一些比较麻烦的问题.有时候也是颇感无奈. 有句话说的好.人不要总在一棵树上吊死.去旁边那棵树上也可以试试.好了不扯了.直接进入正题吧! 先来阐述 ...
- SG函数学习总结
有点散乱, 将就着看吧. 首先是博弈论的基础, 即 N 和 P 两种状态: N 为必胜状态, P 为必败状态. 对于N, P两种状态, 则有 1. 没有任何合法操作的状态, P; 2. 可以移动到P局 ...