🍖Flask四剑客及简单使用

一.Flask 的使用

1.简单使用

  • 展示 "hello word"
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return '<h1>Hello Word!</h1>'

if __name__ == '__main__':
    # flask默认的端口是5000
    app.run()  # 本质还是调用了run_simple()方法:(源码)run_simple(host, port, self, **options)
  • 效果

image-20210602211241913

  • 方法及参数分析
from flask import Flask  # 导入Flask类

app = Flask(__name__)
"""
Flask内参数:
import_name : Flask程序所在的包(模块),传 __name__ 就可以,用来决定Flask在访问静态文件时查找的路径
static_path : 静态文件访问路径(不推荐使用,使用 static_url_path 代替)
static_url_path : 静态文件访问路径,可以不传,默认为:/ + static_folder
static_folder : 静态文件存储的文件夹,可以不传,默认为 static
template_folder : 模板文件存储的文件夹,可以不传,默认为 templates
"""

@app.route('/')
def index():
    return '<h1>Hello Word!</h1>'
"""
flask的路由是通过给视图添加装饰器的方式进行编写的。当然也可以分离到另一个文件中
flask的视图函数,flask中默认允许通过return返回html格式数据给客户端
"""

if __name__ == '__main__':
    # 运行flask,指定ip和port(默认是本机,5000端口)
    app.run(host="0.0.0.0", port=5000)

二.Flask 四剑客、jinja2、request、登入入示例

1.Falsk 三剑客

  • request : 类比Django中 HttpResponse (HTTP请求)
  • render_template : 类比Django中 render (渲染)
  • redirect : 类比Django中 redirect (重定向)
  • jsonify : 类比Django中 JsonResponse(返回json格式数据)

2.jinja2 模板语法

  • 与Django的DTL类似,但是比DTL强大,支持加括号执行,字典支持中括号取值和get取值

3.请求数据的存放的位置

  • get 请求 : request.query_string.get('xxx')
  • post 请求 : request.form.get('xxx')

3.登入示例

  • run.py
from flask import Flask, render_template, request, redirect

app = Flask(__name__)
app.debug = True
"""
开发阶段,设置debug模式
会在页面中显示错误信息
可以在修改代码之后自动重启服务
"""

# 用户信息
USERS = {
    1: {'name': '派大星', 'age': 18, 'gender': '男', 'info': "星星星星星"},
    2: {'name': '海绵宝宝', 'age': 28, 'gender': '男', 'info': "宝宝宝宝宝"},
    3: {'name': '章鱼哥', 'age': 18, 'gender': '女', 'info': "鱼鱼鱼鱼鱼鱼"},
}

@app.route('/')
def index():
    # 渲染页面,展示用户信息,前端使用的是jinjia2模板语法
    return render_template('index.html', user=USERS)

# 前端通过转换器传入id参数
@app.route('/detail/<int:id>')
def detail(id):
    # 拿到该id用户渲染到详情页面
    user = USERS[id]
    return render_template('detail.html', user=user)

# flask默认只允许get请求, 可以通过methods添加请求类型
@app.route('/login/', methods=["GET", "POST"])
def login():
    if request.method == "POST":
        password = request.form.get('password')
        username = request.form.get('username')
        if username == "shawn" and password == "123":
            # 登入成功重定向到首页
            return redirect('/')
        else:
            return render_template('login.html', error='用户名或密码错误!')
    return render_template('login.html')


if __name__ == '__main__':
    app.run()
  • index.html



    <meta charset="UTF-8">
    <title>Title</title>


    <h1>用户信息</h1>
    
        {% for k,v in user.items() %}
        <table>
         <tbody>
          <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>
         </tbody>
        </table>
        {% endfor %}



  • detail.html

<h1>用户信息: {{user.name}}</h1>
    <div>
        {{user.info}}
    </div>

  • login.html

<h1>用户登录</h1>
    <form method="post">
        <input type="text" name="username">
        <input type="password" name="password">
        <input type="submit" value="登录"><br><span style="color: red">{{error}}</span>
    </form>

</int:id>

posted @ 2021-06-04 22:52  给你骨质唱疏松  阅读(143)  评论(0编辑  收藏  举报