Flask篇:flask介绍及安装

一、介绍

1.Flask介绍

        Flask是一个基于Python开发并且依赖jinja2模板(DTL)和Werkzeug WSGI(符合wsgi协议的web服务器,wsgiref)服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。

2.特征对比django

        flask:小而精,插件的支持
        Django大而全(3.x以后支持异步)

3.其他异步框架

        aiomysql
        aioredis
        python异步的orm框架

二、安装

1.下载

pip install flask

2.基本使用

from flask import Flask

app=Flask(__name__)
@app.route('/',methods=['POST','GET'])
def index():
    return 'hello  world'

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

image-20220805115345779

三、flask快速使用,展示用户信息案例

1.flask项目的py文件

# 混合
# 1 登录  ---》返回给前端cookie
# 2 登录成功后可以访问首页(不登录不能访问)
# 3 点击首页的详情,访问详情(不登录不能访问)


from flask import Flask, request, render_template, session, redirect,jsonify

app = Flask(__name__)
app.secret_key = 'asdfasdfae4342@@4353'  # 如果要使用session,必须写秘钥

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


@app.route('/login', methods=['GET', 'POST'])
def index():
    # 判断请求是get还是post,如果是get请求,返回一个页面
    if request.method == 'GET':
        return render_template('login.html')
    else:
        username = request.form.get('username')
        password = request.form.get('password')
        if username == 'lqz' and password == '123':
            # 向浏览器中写入cookie,使用session,跳转到首页
            session['username'] = 'lqz'  # 写入session,到底写哪了?
            return redirect('/home')
        else:
            return render_template('login.html', err='用户名或密码错误')


@app.route('/home')
def home():
    if session.get('username') == 'lqz':
        return render_template('home.html', user_dict=USERS)
    else:
        return redirect('/login')


@app.route('/detail/<int:pk>')
def detail(pk):
    if session.get('username') == 'lqz':
        return render_template('detail.html', info=USERS.get(pk))
    else:
        return redirect('/login')


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

2.login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post">
    <p>用户名:<input type="text" name="username"></p>
    <p>密码:<input type="password" name="password"></p>
    <input type="submit" value="提交">{{err}}
</form>

</body>
</html>

3.home.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>

4.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>

四、使用总结

1.响应四件套

返回字符串  return 字符串                             ----->django中HttpResponse('字符串')
返回模板    return render_template('home.html')      ----->django中render(request,模板,{})
返回重定向  return redirect('/login')                ----->django中return redirect('/login')
返回json   return jsonify(字典,列表)                ----->django中JsonResponse

2.session的使用

# 直接全局导入
from flask import session
# 添加到session
session['']=赋值

3.路由的参数的使用

@app.route('/detail/<int:pk>')  # 和django中的转换器一样
def detail(pk):
    ...

4.render_template的使用

# 首先需要在当前目录下创建一个templates文件夹,里面存放的是项目的html文件

render_template(模板名字,变量=值,变量=值)
# return render_template('home.html', user_dict=USERS)

# django
render(request,'模板名字',context={变量:值,变量:值})

五、配置文件的导入方法(以DEBUG模式为例)

1.第一种:直接app对象点的方式修改

app.secret_key='asfasdf'
app.debug=True

2.第二种:app所有的配置项都在app.config这个字典中

app.config['DEBUG']=True

3.第三种:仿django的settings.py 写法

在settings.py中写配置,然后在flask项目中导入(和django一样)
app.config.from_pyfile('settings.py')

4.第四种:通过类的方式

写一个类,在类中写配置,然后使用下面方法导入
app.config.from_object('settings.DevelopmentConfig')

5.其他

app.config.from_envvar("环境变量名称")
app.config.from_json("json文件名称")
posted @ 2022-08-08 15:56  马氵寿  阅读(425)  评论(0编辑  收藏  举报