Hzangyao

导航

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 on 2022-07-02 10:59  Hzangyao  阅读(16)  评论(0编辑  收藏  举报