zoukankan      html  css  js  c++  java
  • 用 Python 构建 web 应用

    用 Python 构建 web 应用

    如果说仅仅要用 Python 构建 web 应用,可以将 socket 连接、HTTP 原始请求和响应格式等涉及网络基础的东西交给现成的库来实现,只需要专注于 web 端界面、交互、业务逻辑以及数据库的设计,那么使用 Python 构建一个 web 应用实际上就比较简单了。

    关于 Python 这门语言

    这是我第一次使用 Python 语言,简单了看了下 廖雪峰的 Python 教程,了解了相应的语法和 web 开发相关的内容。其实在编写代码时能感受到,Python 确实挺容易上手的,有些地方看上去语法很奇怪或者说难以理解,但是回过头对照教程里的基础知识又能够明白个大概。Python 中有一些如 __main____init____name__ 这类特殊变量,在刚开始使用的时候按照教程写,然后根据 Python 教程对照着看,感觉还是可以明白的。

    简单的 web 应用:Hello Web

    这一部分可以看下 廖雪峰的 Python 教程 中关于 WSGI 接口的内容,简单提一下:

    # simple_server.py
    from wsgiref.simple_server import make_server
    
    def application( environ, start_response ):
    start_response( '200 OK', [ ('Content-Type', 'text/html') ] )
    return [b'<h1>Hello, Web</h1>']
    
    httpd = make_server( '', 8080, application )
    print('Serveing HTTP on port 8080...')
    
    httpd.serve_forever()
    

    如果你使用的 Python 是 3.x,那么在运行上面这段代码时可能就会报错,如果报错内容和 wsgiref handlers 有关,那么可以参考 python3.4中自定义wsgi函数,make_server函数报错问题 这篇文章的解决方法,将 /path_to_python_installation/Lib/wsgiref 目录下的 handlers.py 文件中关于 finish_response 的部分修改(约第 180 行):将 self.write(data) 改成 self.write(data.encode())

    然后打开浏览器,访问 127.0.0.1:8080 端口就可以看到 “Hello Web” 了。

    使用 flask 框架进行开发

    上面使用 wsgiref 可以很方便的制作简单的 web 应用。但是如果要制作较复杂的应用,那么还是使用框架吧,这样会简化很多工作。我使用的是 flask 框架。使用 pip install flask 安装即可。

    虽说框架实现隐藏了很多细节的东西,但是要掌握它也要花点时间,好在它的文档比较详细,而且有一些基础的示例,能够很快做出一个页面来:

    # webserver.py
    from flask import Flask
    from flask import request, render_template, url_for, json, make_response, redirect
    
    app = Flask( '__main__' )
    
    @app.route( "/", methods = [ 'GET', 'POST' ] )
    def home():
    resp = make_response( render_template( 'index.html' , title='test' ) )
    resp.set_cookie( 'username', 'test username' )
    # for user in db.query( 'select * from `account`' ):
    # print(user['port'], user['password'])
    return resp
    

    上面这段代码就可以让你在访问浏览器时得到一个简单的 web 界面,另外我还在网页中存储了一个 username: test username 的 cookie。使用 python webserver.py 运行服务器程序,然后在浏览器访问 127.0.0.1:5000 就可以看到一个简单的网页了。

    使用 flask 比较麻烦的一点是作为模版的 html 文件需要放在 webserver.py 文件同级目录的 templates 目录,也可以在构造 Flask 对象的时候指定模板路径,但是感觉还是不够灵活。模板文件的语法可以参考 jinjia2

    还有一点是关于静态文件的加载,静态文件需要放在同级目录的 static 目录,如果直接在 html 中引用 /css/bootstrap.min.css,在浏览器访问时会出现找不到文件的问题,可以将引用的路径改成 /static/css/bootstrap.min.css,我在 webserver 中添加了一个方法:

    @app.route( '/css/<filename>', methods = [ 'GET' ] )
    def static_css( filename ) :
    with open( './static/css/' + filename, 'r', encoding='utf-8' ) as f :
    resp = make_response( f.read() )
    resp.mimetype = 'text/css'
    return resp
    

    在读取 css 静态文件时,到相应的目录下找到对应的文件读取内容,然后把响应的 mimetype 改成 text/css,否则的话默认响应类型是 text/plain,浏览器会出现警告。

    小结

    至此,一个简单的 web 应用就做好了,但是内容还比较少,而且也没有具体的业务逻辑和数据库操作。相关的内容 flask 框架已经提供了,需要查看 flask 教程。

    References

    1. 廖雪峰的 Python 教程
    2. python3.4中自定义wsgi函数,make_server函数报错问题
    3. python3 运行时报错解决方法
    4. flask
    5. jinjia2
  • 相关阅读:
    Linux环境下入侵工具Knark的分析及防范 java程序员
    六个步骤即可防范ARP地址欺骗类病毒 java程序员
    巧用命令行 揪出ARP欺骗病毒母机方法 java程序员
    poj3264Balanced Lineup(线段树RMQ)
    有了1A的把握再去提交
    poj2828Buy Tickets(线段树 单点更新+区间求和+区间第K值)
    poj2513Colored Sticks(无向图判欧拉路、回路+trie树)
    ACM数学(转)
    sdut2381Broken Keyboard
    sdut2383Decode the Strings(循环节)
  • 原文地址:https://www.cnblogs.com/brifuture/p/9756891.html
Copyright © 2011-2022 走看看