flask Flask简介和快速使用

内容详细

1 Flask简介和快速使用

        # python的web框架:
            -django:大而全,你想要的东西都有,公司里内部用的多     django 3.0以后异步,效率不高,orm是同步
          -flask:小而精,好多东西没有,需要自己写,集成第三方
          -----------异步框架---
          -tornado: python2
          -sanic:像flask,一旦用了异步,后面都要用异步---》mysql,redis--》之前学的通通用不了了,需要用异步模块,aioredis和aiomysql
          -fastapi:像flask,
          -https://www.osgeo.cn/sanic/sanic/blueprints.html


          -async 写在函数前,表示它是一个协程函数 
          -await 在io的语句前写


        # 安装:pip3 install  flask



        from flask import Flask

        app=Flask(__name__)

        @app.route('/')  # 当用户访问根路径
        def index():
            return 'hello web' # 浏览器返回helloworld

        if __name__ == '__main__':
            app.run(port=8080) # 不写默认5000
        # python的同步的web框架,都需要遵循wsgi协议---》flask,django---》他们的web服务器都要遵循wsgi协议--->造两批钢笔--->wsgiref,uwsgi,gunicorn符合wsgi协议的web服务器
        # flask---》测试阶段---》werkzeug--》不仅仅是web服务器---》工具包(既有web服务器功能,又封装了代码)

        # cgi,fastcgi,wsgi,uwsgi uWSGI 分表是什么
            -php-fpm,tomcat,uwgi
          -http://www.liuqingzheng.top/article/1/05-CGI,FastCGI,WSGI,uWSGI,uwsgi%E4%B8%80%E6%96%87%E6%90%9E%E6%87%82/


        # flask的模板渲染使用jinjia2,兼容dtl,但是比它强大,支持(),[]....
        # django的使用dtl

2 登陆显示用户信息案例

main.py

        from flask import Flask,render_template,request,redirect,session,url_for
        app = Flask(__name__)
        app.debug = True
        app.secret_key = 'sdfsdfsdfsdf'

        USERS = {
            1:{'name':'张三','age':18,'gender':'男','text':"道路千万条"},
            2:{'name':'李四','age':28,'gender':'男','text':"安全第一条"},
            3:{'name':'王五','age':18,'gender':'女','text':"行车不规范"},
        }

        @app.route('/detail/<int:nid>',methods=['GET'])
        def detail(nid):
            user = session.get('user_info')
            if not user:
                return redirect('/login')

            info = USERS.get(nid)
            return render_template('detail.html',info=info)


        @app.route('/index',methods=['GET'])
        def index():
            user = session.get('user_info')
            if not user:
                # return redirect('/login')
                url = url_for('l1')
                return redirect(url)
            return render_template('index.html',user_dict=USERS)


        @app.route('/login',methods=['GET','POST'],endpoint='l1')
        def login():
            if request.method == "GET":
                return render_template('login.html')
            else:
                # request.query_string
                user = request.form.get('user')
                pwd = request.form.get('pwd')
                if user == 'cxw' and pwd == '123':
                    session['user_info'] = user
                    return redirect('http://www.baidu.com')
                return render_template('login.html',error='用户名或密码错误')

        if __name__ == '__main__':
            app.run()

detail.html

        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>Title</title>
        </head>
        <body>
            <h1>详细信息 {{info.name}}</h1>
            <div>
                {{info.text}}
            </div>
        </body>
        </html>

index.html

        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>Title</title>
        </head>
        <body>
            <h1>用户列表</h1>
            <table>
                {% for k,v in user_dict.items() %}
                <tr>
                    <td>{{k}}</td>
                    <td>{{v.name}}</td>
                    <td>{{v['name']}}</td>
                    <td>{{v.get('name')}}</td>
                    <td><a href="/detail/{{k}}">查看详细</a></td>
                </tr>
                {% endfor %}
            </table>
        </body>
        </html>

login.html

        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>Title</title>
        </head>
        <body>
            <h1>用户登录</h1>
            <form method="post">
                <input type="text" name="user">
                <input type="text" name="pwd">
                <input type="submit" value="登录">{{error}}
            </form>
        </body>
        </html>
posted @ 2022-05-22 23:05  风花雪月*  阅读(164)  评论(0编辑  收藏  举报