参考了廖雪峰的Python博客。

web请求顺序:

浏览器发送一个http请求

服务器收到请求后,生成一个html文档。

服务器将html文档作为http相应的body发送给浏览器

浏览器收到http响应,从http的body中取出html文档并在浏览器上显示

通过wsgi接口可以屏蔽底层的函数,安心写web。

我们只需写application函数即可,有两个参数environ,start_response。environ包含了浏览器发给服务器的http请求信息的dict对象,比如你要登陆,那么你发请求的时候就会包含用户名,密码等信息,而这些信息会以dict形式保存在environ中。而start_response则是一个发送http响应的函数。例如

def application(environ,start_response):

start_reponse(‘200 OK’,[(‘Content-Type’,’text/html’)])

return ‘<h1>hello,web</h1>

这里的start_response发送的就作为一个header给浏览器,而return的就作为body发给浏览器

启动:

from wsgiref.simple_server import make_server

def application(environ, start_response):

start_response('200 OK', [('Content-Type', 'text/html')])

return '<h1>Hello,sunrye</h1>'

httpd=make_server('',8000,application)#绑定了8000端口

print "servering HTTP on port 8000"

httpd.serve_forever()

通过以上代码能实现对某个url请求的服务。但是要知道,一个网站中有好多请求,针对这些不同的请求有不同的参数,不同的操作,我们可以通过从environ获取不同的参数和操作,通过if语句返回不同的内容。例如

def application(environ,start_response):

method=environ[‘REQUEST_METHOD’]

path=environ[‘PATH_INFO’]

if method==’GET’ and path=’\’

return homepage(environ,start_response)

elif .....

这样效率显得比较低,而且代码扩展性差,不好维护。

这个时候就需要一个框架来简化这个过程。以flask为例:

from flask import Flask

from flask import request

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])

def home():

return '<h1>Home</h1>'

@app.route('/signin', methods=['GET'])

def signin_form():

return '''<form action="/signin" method="post">

<p><input name="username"></p>

<p><input name="password" type="password"></p>

<p><button type="submit">Sign In</button></p>

</form>'''

@app.route('/signin', methods=['POST'])

def signin():

# 需要从request对象读取表单内容:

if request.form['username']=='admin' and request.form['password']=='password':

return '<h3>Hello, admin!</h3>'

return '<h3>Bad username or password.</h3>'

if __name__ == '__main__':

app.run()

这样就简化了代码

MVC:

mvc就是model-view-controller这三层。C负责业务逻辑,比如说验证用户身份,负责从数据库获取数据等操作。而view很好理解就是展现一个页面给user的。而model是在controller和view中的,他负责将controller的变量传递给view。例如

一开始浏览器发送了一个GET请求并且请求的参数为sunrye,那么经过web框架,就能获取到这个参数,并且做出相应的业务逻辑,例如验证用户是否存在,返回用户其他数据等(这个就是controller),但是最终的数据是要返回给浏览器是通过html文本返回的,所以需要model将这些参数给view层,例如这里的model就是一个dict,{‘name’:’sunrye’,’age’:24}那么在view就会将他解析出来,例如<p>name is {{name}},age is {{age}}</p>最后用户看到的就是name is sunrye,age is。

python web开发基本概念的更多相关文章

  1. Java Web开发和Python Web开发之间的区别

    今天的文章讨论了Java Web开发和Python Web开发之间的区别.我不鼓励我们在这里从Java Web迁移到Python Web开发.我只是想谈谈我的感受.它不一定适合所有情况,仅供我们参考. ...

  2. Python Web开发中的WSGI协议简介

    在Python Web开发中,我们一般使用Flask.Django等web框架来开发应用程序,生产环境中将应用部署到Apache.Nginx等web服务器时,还需要uWSGI或者Gunicorn.一个 ...

  3. 转载:Python Web开发最难懂的WSGI协议,到底包含哪些内容?

    原文:PSC推出的第二篇文章-<Python Web开发最难懂的WSGI协议,到底包含哪些内容?>-2017.9.27 我想大部分Python开发者最先接触到的方向是WEB方向(因为总是有 ...

  4. Redis的Python实践,以及四中常用应用场景详解——学习董伟明老师的《Python Web开发实践》

    首先,简单介绍:Redis是一个基于内存的键值对存储系统,常用作数据库.缓存和消息代理. 支持:字符串,字典,列表,集合,有序集合,位图(bitmaps),地理位置,HyperLogLog等多种数据结 ...

  5. windows下python web开发环境的搭建

    windows下python web开发环境: python2.7,django1.5.1,eclipse4.3.2,pydev3.4.1 一. python环境安装 https://www.pyth ...

  6. 关于测试驱动的开发模式以及实战部分,建议看《Python Web开发测试驱动方法》这本书

    关于测试驱动的开发模式以及实战部分,建议看<Python Web开发测试驱动方法>这本书

  7. python web 开发学习路线

    转载,备着 自己目前学习python web 开发, 经过两个月的摸索,目前对web开发有了浅显的认识,把自己的学习过程贴出来.1.python入门推荐老齐<从零开始学python>,&l ...

  8. python web开发——django学习(一)第一个连接mysql数据库django网站运行成功

    1.新建一个项目 2.新建一些文件夹方便管理 3.新建一个项目叫message  4.连接数据库 python web开发Django连接mysql 5.在数据库里自动生成django的表  6.运行 ...

  9. Python Web开发:Django+BootStrap实现简单的博客项目

    创建blog的项目结构 关于如何创建一个Django项目,请查看[Python Web开发:使用Django框架创建HolleWorld项目] 创建blog的数据模型 创建一个文章类 所有开发都是数据 ...

随机推荐

  1. pkgmgmt: Comparison between different Linux Systems..

    found this page.. already done by precedents.. installation: aptitude install apt-get install yum in ...

  2. jQuery 图片随滚动条滚动加载

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. java 环境的配置

    JAVA_HOMEC:\Program Files\Java\jdk1.6.0_02 PATHC:\Program Files\Java\jdk1.6.0_02\bin CLASSPATH.;%JAV ...

  4. linux和windows之间上传 下载文件 非ftp方式

    用 命令 rz   上传   sz 下载  文件夹加上 -r  rz上传替换时用 -y   谁用谁知道 两台linux传 : scp -r  文件夹  username@ip:路径  (如果传输文件就 ...

  5. codeforces 558/C Amr and Chemistry(数论+位运算)

    题目链接:http://codeforces.com/problemset/problem/558/C 题意:把n个数变成相同所需要走的最小的步数易得到结论,两个奇数不同,一直×2不可能有重叠枚举每个 ...

  6. magento模板中XML与phtml关系 [四]

    layout\catalogserch.xml 中声明的 as="topSearch" 被templ\page\html\header.phtml调用输出 echo $this-& ...

  7. codeforces 369 div2 C dp

    http://codeforces.com/contest/711 C. Coloring Trees time limit per test 2 seconds memory limit per t ...

  8. svn up 提示:Skipped '.'

    >svn up Skipped '.' >svn cleanup '.' is not a working copy directory >svn co https://192.16 ...

  9. STM32软件复位(基于库文件V3.5)

    源:STM32软件复位(基于库文件V3.5) void SoftReset(void) { __set_FAULTMASK(); // 关闭所有中端 NVIC_SystemReset();// 复位 ...

  10. 2304: Lights Out(枚举)

    枚举第一行所有可能的的情况 #include<iostream> #include<cstdio> #include<cstring> #include<al ...