美文网首页
python web 部分

python web 部分

作者: 希希里之海 | 来源:发表于2019-05-13 15:50 被阅读0次

    python web 部分

    WSGI

    什么是 WSGI? 为什么需要它?

    • Python Web Server Gateway Interface(web 服务器网关接口)
    • 解决 Python Web Server 乱象 mod_python, CGI, FastCGI 等
    • 描述了 Web Server (Gunicorn/uWSGI)如何与 web 框架(Flask/Django)交互,Web 框架如何处理请求

    举个很常见的例子

    def application(environ, start_response)
    
    • application 就是 WSGI app,一个可调用对象
    • 参数:
    • environ:一个包含 WSGI 环境信息的字典,由 WSGI 服务器提供,常见的 key 有 PATH_INFO, QUERY_STRING 等
    • start_response:生成 WSGI 响应的回调函数,接受两个参数,status 和 headers
    • 函数返回响应体的迭代器

    一个简单的兼容 WSGI 的 web 应用

    # 导入 python 内置的 WSGI server
    from wsgiref.simple_server import make_server
    
    def application(environ, start_response):
        print(environ)  # 建议打出来这个字典看看有哪些参数
        status = '200 OK'
        headers = [('Content-Type', 'text/html; charset=utf8')]
        start_response(status, headers)
        return [b"<h1>Hello, World!</h1>"]
        
    if __name__ == '__main__':
        httpd = make_server('127.0.0.1', 8000, application)
        httpd.serve_forever()
    

    运行结果如下:

    常用的 Python Web 框架对比

    Django VS Flask Vs Tornado

    • Django:大而全,内置 ORM、Admin 等组件,第三方插件较多
    • Flask:微框架,插件机制,比较灵活(如 cookiecutter-flask 插件,可以生成统一的项目模版)
    • Tornado:异步支持的微框架和异步网络库
    什么是 MVC

    MVC:模型(Model),视图(View),控制器(Controller)

    • Model:负责业务对象和数据库的交互(ORM)
    • View:负责与用户的交互展示
    • Controller:接收请求参数调用模型和视图完成请求

    如图:


    什么是 ORM

    Object Relational Mapping,对象关系映射

    • 用于实现业务对象与数据表中的字段映射
    • 代码更加面向对象,代码量更少,灵活性高,提升开发效率

    web 安全问题

    常见的web 安全问题,原理和防范措施,安全意识

    • SQL 注入
    • XSS(跨站脚本攻击,Cross-Site Scripting)
    • CSRF(跨站请求伪造,Cross-Site Request Forgery)
    什么是 SQL 注入
    • 通过构造特殊的输入参数传入 Web 应用,导致后端执行了恶意 SQL
    • 通常由于程序员未对输入进行过滤,直接动态拼接 SQL 产生
    • 可以使用 开源工具 sqlmap,SQLninja 检测
    如何防范 SQL 注入

    web 安全一大原则:永远不要相信用户的任何输入

    • 对输入参数做好检查(类型和范围);过滤和转义字符
    • 不要直接拼接 sql,使用 ORM 可以大大降低 sql 注入风险
    • 数据库层:做好权限管理配置;不要明文存储敏感信息
    什么是 XSS

    XSS(Cross Site Scripting),跨站脚本攻击

    • 恶意用户将代码植入到提供给其他用户使用的页面中,未经转义的恶意代码输出到其他用户的浏览器被执行
    • 用户浏览页面的时候嵌入页面中的脚本(js)会被执行,攻击用户
    • 主要分为两类:反射性(非持久型),存储性(持久型)
    什么是 CSRF

    CSRF(跨站请求伪造,Cross-Site Request Forgery)

    相关文章

      网友评论

          本文标题:python web 部分

          本文链接:https://www.haomeiwen.com/subject/ptxraqtx.html