python web开发基础_python web开发基本概念

参考了廖雪峰的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 ‘

hello,web

这里的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 '

Hello,sunrye

'

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 '

Home

'

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

def signin_form():

return '''

Sign In

'''

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

def signin():

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

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

return '

Hello, admin!

'

return '

Bad username or password.

'

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就会将他解析出来,例如

name is {{name}},age is {{age}}

最后用户看到的就是name is sunrye,age is。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值