flask学习

这篇博客详细介绍了Flask框架的使用,包括路由请求和参数处理、模板引擎的运用、表单验证以及数据库操作,特别强调了db.Column的配置选项。

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

一、路由请求和参数处理

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

# 1.导入Flask扩展
from flask import Flask

# 2.创建Flask应用程序实例
# 需要传入__name__,作用是为了确定资源所在的路径
app = Flask(__name__)


# 3.定义路由及视图函数
# Flask中定义路由是通过装饰器实现的
# 路由默认只支持GET,如果需要增加,需要自行指定
@app.route('/', methods = ['get', 'post'])
def index():
    return 'Hello World'

# 使用同一个视图函数来显示不同用户的订单信息
# <>定义路由参数,<>内需要起个名字
@app.route('/orders/<int:order_id>')
def get_order_id(order_id):

    # 参数类型,默认是字符串,<class str>
    print(type(order_id))

    # 有的时候,需要对路由做访问优化,订单ID应该是int类型

    # 需要在视图函数的()内填入参数名,那么的代码才能去使用
    return 'order_id %s' % order_id


# 4.启动程序
if __name__ == '__main__':
    # 执行了app.run,就会将Flask程序运行在一个简易的服务器(Flask提供的,用于测试)
    app.run()

二、模板、变量代码块、控制代码块和过滤器

1、py文件

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

from flask import Flask
from flask import render_template

app = Flask(__name__)

# 1.如何返回一个网页(模板)
# 2.如何给模板填充数据
@app.route('/')
def index():

    # 比如需要传入网址
    url_str = 'www.itheima.com'

    my_list = [1,3,5,7,9]

    my_dict = {
               "name": "沐阳陈",
               "url": "www.baidu.com",
              }

    my_int = 38

    # 通常,模板中使用的变量名和要传递的数据变量名保持一致
    return render_template('index.html',
                           url_str=url_str,
                           my_list=my_list,
                           my_dict=my_dict,
                           my_int=my_int,
                          )


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

2、html文件

<html>
<head>
</head>
<body>
这是模板<br>
这是首页<br>


{#变量代码块#}

{{url_str}} <br> {#字符串#}

{#列表的使用#}
{{my_list}} <br>{#列表#}
{{my_list.2}} <br>{#列表的第二个元素#}
{{my_list[3]}} <br>{#列表的第二个元素#}

{#字典的使用#}
{{my_dict}} <br>
{{my_dict.url}} <br>
{{my_dict['name']}} <br>

{{my_int}} <br>

<hr>


{#控制代码块 {% %} #}

{#for循环的使用,建议先写for,然后按住tab进行补全#}
{% for num in my_list %}
    {#数据大于3才能显示#}
    {% if num > 3 %}
        {{num}} <br>
    {% endif %}
{% endfor %}

<hr>


{# 过滤器 #}

{# 字符串变大写 #}
{{url_str | upper}} <br>
{#字符串反转#}
{{url_str | reverse}} <br>
{#过滤器链式调用#}
{{url_str | reverse | upper}} <br>

</body>
</html>

三、普通表单验证和WTF插件

1.py文件

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

from flask import Flask, render_template, request, flash
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, EqualTo

APP = Flask(__name__)
APP.secret_key = 'muYangChen'

'''
目的:实现一个简单的登录逻辑处理
1.路由需要有get和post两种请求方式 --> 需要判断请求方式
2.获取请求参数
3.判断参数是否填写 & 密码是否相同
4.如果判断都没有问题,就返回一个success
'''

'''
给模板传递消息
flash --> 需要对内容加密,因此需要设置secret_key,做加密消息混淆
模板中需要便利消息
'''

'''
使用WTF实现表单
自定义表单类
'''

class LoginForm(FlaskForm):
    '''
    pass
    '''
    username = StringField(u'用户名:', validators=[DataRequired()])
    password = PasswordField(u'密码:', validators=[DataRequired()])
    password2 = PasswordField(u'确认密码:', validators=[DataRequired(),
                                                    EqualTo('password',
                                                            '密码输入的不一致')])
    submit = SubmitField(u'提交')

@APP.route('/form', methods=['GET', 'POST'])
def login():
    '''
    pass
    '''
    login_form = LoginForm()

    # 1.需要判断请求方式
    if request.method == 'POST':

        # 2.获取请求参数
        username = request.form.get('username')
        password = request.form.get('password')
        password2 = request.form.get('password2')

        # 3.验证参数,WTF可以一句话实现所有的校验
        # 我们没有CSRF token
        if login_form.validate_on_submit():
            return 'success'
        else:
            flash('参数有误')


    return render_template('index.html', login_form=login_form)



@APP.route('/', methods=['GET', 'POST'])
def index():
    """
    pass
    """
    # request: 请求对象 --> 可以获取请求方式,数据

    # 需要判断请求方式
    if request.method == 'POST':

        # 2.获取请求参数
        username = request.form.get('username')
        password = request.form.get('password')
        password2 = request.form.get('password2')
        print(username, password, password2)

        # 3.判断参数是否填写 & 密码是否相同
        if not all([username, password, password2]):
#            print(u'参数不完整')
            flash(u'参数不完整')
        elif password != password2:
#            print(u'密码不一致')
            flash(u'密码不一致')
        elif len(password) < 6:
#            print(u'密码太短')
            flash(u'密码太短')
        else:
            return 'success'


    return render_template('index.html')

if __name__ == '__main__':
    APP.run(debug=True)

2.html文件

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title></title>
</head>
<body>

<form method="post">
	<label>用户名:</label><input type="text" name="username"><br>
	<label>密码:</label><input type="password" name="password"><br>
	<label>确认密码:</label><input type="password" name="password2"><br>
	<input type="submit" value="提交"><br>

    {#使用遍历获取闪现的消息#}
    {% for message in get_flashed_messages() %}
        {{message}}
    {% endfor %}
</form>


<hr>

<form method="post">
    {{login_form.csrf_token}}
    {{login_form.username.label }}{{login_form.username}} <br>
    {{login_form.password.label }}{{login_form.password}} <br>
    {{login_form.password2.label }}{{login_form.password2}} <br>
    {{login_form.submit}} <br>
</form>


</body>
</html>

四、数据库操作

1.db.Column 中其余的参数指定属性的配置选项

选项名说 明
primary_key如果设为 True,这列就是表的主键
unique如果设为 True,这列不允许出现重复的值
index如果设为 True,为这列创建索引,提升查询效率
nullable如果设为 True,这列允许使用空值;如果设为 False,这列不允许使用空值
default为这列定义默认值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值