Flask框架

本文详细介绍了Flask框架的使用,包括最简单的程序、调试模式、路由、变量规则、静态文件、模板渲染、文件上传、HTTP方法、Cookies、会话等关键概念。此外,还讲解了如何利用Flask连接MySQL数据库,处理增删改查操作,并解决了循环导入问题。最后,提到了Flask点餐系统的实现和分页功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

微框架、轻量级框架不比Django框架那种重量级框架体型臃肿,内容封装的比较全使用的时候好多可以直接调用,需要代码量较少,
Flask框架属于轻型框架,使用时所需代码量较多,用起来稍微麻烦一点
Flask框架pip下载就ok了

1. 最简单的flask程序
from flask import Flask
app = Flask(__name__)

@app.route('/') #装饰器
def hello_world():
    return 'Hello World!'

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

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述找不到路径的问题
在这里插入图片描述
更改代码 debug 后,不需要重新运行就可以跳转页面:
在这里插入图片描述
在这里插入图片描述
flask访问服务器的端口号是 5000 ,flask框架的服务server是内置的

2. 调试模式
app.run(debug=True)
app.debug = True
3. 外部访问
host = '0.0.0.0'
4. 路由
@app.route( ' / ' )
def index():
    return 'index Page'

@app.route('/hello')
def hello():
    return 'Hello World'
5. 变量规则

要给URL添加变量部分,可以把特殊字段标记为<variable_name>,这部分将会作为命令参数传递到函数。规则可以用converter:variable_name指定一个可选的转换器

@app.route('/user/<username>')
def show_user_profile(username):
    return 'User %s' % username
    
@app.route('/post/<int:post_id>')
def show_post(post_id)
return 'Post %d' post_id

在这里插入图片描述
在这里插入图片描述

@app.route("/user/<username>")
def show_user_profile(username):
    return "User %s" % username

@app.route("/post/<int:post_id>")
def show_post(post_id):
    return "Post %d" % post_id

在这里插入图片描述
可以转类型,三个类型 int 、 float 、path

6. 唯一URL/重定向行为:

带斜线 ( /…/ )重定向,不带斜线 ( /…) 是唯一
Flask的URL规则都基于Werkzeug的路由模块。这个模块背后的思想是基于Apache以及更早的HTTP服务器主张的先例,保证优雅且唯一的URL

@app.route(' /projects/ ')
def projects():
    return  'The project page'

@app.route('/about')
def about():
    return  'The about page'
7. 构造URL

flask能匹配URL, Flask也可以生成它们,可以用 url_for() 来给指定的函数构造URL。它接受函数名作为第一参数,也接受对应URL规则的变量部分的命名参数。

from flask import Flask,url_for
app = Flask(__name__)

@app.route("/")
def index(): pass

@app.route("/user/<username>")
def profile(username):pass

with app.test_request_context():
print url_for('index')
print url_for('login')
print url_for('login',next='/')
print url_for('profile',username='John Doe')
8. HTTP方法
@app.route('/login', methods=['GET','POST'])
def login():
    if request.method == 'POST':
         do_the_login()
    else:
         show_the_login_form()

1/ get方式
传值的时候会暴露传输参数
参数大小有限制

2/ post方式
传值的时候不会暴露传输参数
参数大小没有限制

上面两种方式从不同的角度看,对比一下可以看出区别。

数据角度来看,两者一样;
安全角度来看,可以加密

9. 静态文件
10. 模板渲染
from flask import render_template

@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
    return render_template('hello.html', name=name)
11. 文件上传

index.html:

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

</form>
<p style="color: red">{
  {error}}</p>

在这里插入图片描述
success.html :

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="/static/jquery-1.11.3.js"></script>
<script src="/static/jquery.form.js"></script>
<script>
    function upload() {
        var options = {
            type:"post",
            dataType:"text",
            success:function (data) {
                $('#img').attr("src",data);
            }

        }


        $('#jvForm').ajaxSubmit(options);
    }


</script>
</head>
<body>
 <h1>登录成功,欢迎{
  {username}}</h1>
     <form action="/upload/" method="post" enctype="multipart/form-data" id="jvForm">
         <input type="file" name="file" onchange="upload()">
         <!--<input type="submit" value="上传">-->
     </form>
<img src="" id="img">
</body>
</html>

在这里插入图片描述

page_not_found.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
这是一个错误页面   404
</body>
</html>

在这里插入图片描述

12. Cookies

通过cookies属性来访问Cookies, 用影响对象的 set_cookie方法 来设置Cookies 。请求对象的 cookies属性 是一个内容为 客户端提交的所有Cookies的字典。

读取cookies:

from flask import request

@app.route('/')
def index():
    username = request.cookies.get('username')

存储cookies:

from flask import make_response

@app.route('/')
def index():
resp = make_response(render_template(...))
resp.set_cookie('username', 'the username')
return resp      
13. 重定向(redirect)和错误

可以用 redirect( )函数 把用户重定向到其它地方。放弃请求并返回错误代码,用 abort()函数 。这里是一个它们如何使用的例子:

from flask import abort, redirect, url_for

@app.route('/')
def index():
    return redirect(url_for('login'))

@app.route('/login')
def login():
    abort(401)
    this_is_never_executed()   # 不可执行

这是一个相当无意义的例子,因为用户会从主页面重定向到一个不能访问的页面(401意味着禁止访问),但是它展示了重定向是如何工作的。

默认情况下,错误代码会显示一个黑白的错误页面。如果你要定制错误页面,可以使用 errorhandler()装饰器

from flask import render_template

@app.errorhandler(404)
def page_not_found(error):
    return render_template('page_not_found.html'),404

注意render_template()调用之后的404,这告诉Flask,该页的错误代码是404,即没有找到。默认为200,也就是一切正常。
在这里插入图片描述

14. 会话 session

除请求对象外,还有一个 session对象。它允许你在不同请求间存储信息。它是在 Cookies的基础上实现的,并且对Cookies进行密钥签名。以查看你Cookie的内容,但却不能修改它,除非用户知道签名的密钥。

要使用会话,你需要设置一个密钥。这里介绍会话如何工作:

from flask import Flask, session, redirect, url_for, escape, request
app = Flask(__name__)

@app.route('/')
def index():
    if 'username' in session:        # 如果username在session中
        return 'Logged in as %s' % escape(session['username'])     # 如果在就返回一个字符串
    return 'You are not logged in' 

@app.route('/login',methods=['GET','POST'])
def login():
    if request.method == ‘POST’:     # 判断
          session['username']=request.form['username']
          return redirect(url_for('index'))
       return ....

@app.route('/logout')
def logout():
    session.pop('username',None)
    return redirect(url_for('index'))

app.secret_key = '  A0Zr98j/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值