flask学习-day1

介绍


django是大而全,flask是轻量级的框架

django提供非常多组件:orm/session/cookie/admin/form/modelform/路由/视图/模板/中间件/分页/auth/contentype/缓存/信号/多数据库连接

flask本身没有太多的功能:路由/试视图/模板/session/中间件,第三方组件齐全

注意:django的请求处理是逐一封装和传递;flask请求是利用上下文管理实现的

快速使用


安装

复制代码
pip install flask

依赖

复制代码
Werkzeug

基于wsgi的服务

python 复制代码
from werkzeug.serving import run_simple

def func(environ,start_response):
    print("请求来了")
    pass

if __name__ =='__main__':
    run_simple('127.0.0.1', 5000, func)

基于flask服务

复制代码
# flask 基于werkzeug的wsgi实现,flask自己没有wgsi
# 用户一旦请求到来,就会调用app.__call__方法
python 复制代码
from flask import Flask

app = Flask(__name__)


@app.route('/index')
def index():
    return "hello word"


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

简单操作


工程目录

主文件s2.py

python 复制代码
from flask import Flask, render_template, jsonify, request, redirect, url_for

app = Flask(__name__)

DATA_DICT = {
    1: {'name': '袁山山', 'age': 13},
    2: {'name': '张涛', 'age': 18}
}


@app.route('/login', methods=['GET', 'POST'])
def login():
    # return '登录'
    if request.method == 'GET':
        return render_template('login.html')
    # return jsonify({'code': 1000, 'data': [1, 2, 3]})
    user = request.form.get('user')
    pwd = request.form.get('pwd')
    print(user, pwd)
    if user == '1' and pwd == '1':
        return redirect('/index')
    error_message = '用户名或密码错误'
    return render_template('login.html', **{'error_message': "用户名或密码错误"})


@app.route('/index', endpoint='idx')
def index():
    data_dict = DATA_DICT
    return render_template('index.html', data_dict=data_dict)


@app.route('/edit', methods=['GET', 'POST'])
def edit():
    nid = int(request.args.get('nid'))
    if request.method == 'GET':
        info = DATA_DICT[nid]
        return render_template('edit.html', info=info)

    username = request.form.get('username')
    age = request.form.get('age')
    DATA_DICT[nid]["username"] = username
    DATA_DICT[nid]["age"] = age
    return render_template('index.html', data_dict=DATA_DICT)


# url_for使用接口别名访问,使用endpoint起别名
@app.route('/delete/<int:nid>')
def delete(nid):
    print(nid)
    del DATA_DICT[nid]
    # return redirect('/index')
    return redirect(url_for('idx'))


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

登录界面

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录界面</title>
</head>
<body>
    <h1>hello ,哈哈哈哈哈哈哈哈哈哈哈</h1>
    <form method="post">
        <input type="text" name="user">
        <input type="password" name="pwd">
        <input type="submit" value="提交">
        {{error_message}}
    </form>
</body>
</html>

主页

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <table border="1">
        <thead>
            <tr>
                <th>ID</th>
                <th>用户名</th>
                <th>年龄</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            {% for key,value in data_dict.items() %}
            <tr>
                <td>{{key}}</td>
                <td>{{value.name}}</td>
                <td>{{value.age}}</td>
                <td>
                    <a href="/edit?nid={{key}}">编辑</a>
                    <a href="/delete/{{key}}">删除</a>
                </td>
            </tr>
            {% endfor %}
        </tbody>
    </table>
</body>
</html>

修改

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>修改界面</title>
</head>
<body>
    <h1>修改用户信息</h1>
    <form method="post">
        <input type="text" name="username" value="{{info.name}}">
        <input type="number" name="age" value="{{info.age}}">
        <input type="submit" value="提交">
    </form>
</body>
</html>

总结

flask路由
复制代码
@app.route('/login', methods=['GET', 'POST'])
def login():
路由参数:endpoint为页面的别名,不可以重复,可以使用url_for直接引用别名跳转
复制代码
@app.route('/index', methods=['GET', 'POST'], endpoint='idx')
def index():
    pass
复制代码
@app.route('/delete/<int:nid>')
def delete(nid):
    print(nid)
    del DATA_DICT[nid]
    # return redirect('/index')
    return redirect(url_for('idx'))
动态路由(路径传参,get传参)

@app.route('/index')

def index():

pass

路径传参:

@app.route('/index/<name>')

def index():

pass

@app.route('/index/<int:nid>')

def index(nid):

pass

get传参

from flask import requesr

@app.route('/index')

def index():

username= reques.args.get("")获取url中的参数数据

username = request.form.get("")获取表单的数据

返回数据

@app.route('/index')

def login():

return render_template("模板文件")

return jsonify()

return redirect("/index/")

return redirect(url_for('index'))

return str

模板处理

{{x}}

{% for item in list %}

{{item}}

{% endfor %}

相关推荐
怣5013 分钟前
MySQL聚合函数在查询中的五大核心应用
数据库·mysql
Funny_AI_LAB21 分钟前
AI Agent最新重磅综述:迈向高效智能体,记忆、工具学习和规划综述
人工智能·学习·算法·语言模型·agi
2301_822363601 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
Leo.yuan1 小时前
经营分析会,该讲些什么?
大数据·数据库·数据分析
码界奇点1 小时前
基于Flask与OpenSSL的自签证书管理系统设计与实现
后端·python·flask·毕业设计·飞书·源代码管理
云飞扬1 小时前
浅谈数据访问层
数据库·bpm·数据库访问层
代码游侠2 小时前
学习笔记——Linux内核与嵌入式开发1
linux·运维·前端·arm开发·单片机·嵌入式硬件·学习
宇钶宇夕2 小时前
CoDeSys入门实战一起学习(二十八):(LD)三台电机顺起逆停程序详解—上升、下降沿使用上
单片机·嵌入式硬件·学习
科技林总2 小时前
【系统分析师】6.5 电子商务
学习
代码游侠2 小时前
C语言核心概念复习(一)
c语言·开发语言·c++·笔记·学习