zoukankan      html  css  js  c++  java
  • python web开发基本概念

    参考了廖雪峰的Python博客。

    web请求顺序:

    浏览器发送一个http请求

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

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

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

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

    我们只需写application函数即可,有两个参数environstart_responseenviron包含了浏览器发给服务器的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是在controllerview中的,他负责将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

  • 相关阅读:
    【笔记】求数据前n个主成分以及对高维数据映射为低维数据
    使用sklearn中的fetch_mldata的错误情况以及可能可行的解决方法
    【笔记】求数据的对应主成分PCA(第一主成分)
    【笔记】主成分分析法PCA的原理及计算
    【笔记】如何确定梯度计算的准确性以及调试梯度下降法
    【笔记】随机梯度下降法
    【笔记】线性回归中的梯度下降法(实现以及向量化并进行数据归一化)
    AttributeError: module 'numpy' has no attribute 'num'
    灵雀云CTO陈恺:从“鸿沟理论”看云原生,哪些技术能够跨越鸿沟?
    容器云在证券行业的探索与实践
  • 原文地址:https://www.cnblogs.com/sunrye/p/4386218.html
Copyright © 2011-2022 走看看