Flask框架基础

Flask基础

第一个应用

from flask import Flask

app=Flask(__name__)
@app.route('/')
def index():
      return "hello world"
if __name__ == '__main__':
      app.run()

调试

from flask import Flask

app=Flask(__name__)
@app.route('/')
def index():
      return "hello world"
if __name__ == '__main__':
      app.run

路由

程序需要每个URL运行哪些代码,所以保存一个URL到Python函数的映射关系。处理URL和函数之间关系的程序称为路由。

from flask import Flask

app=Flask(__name__)
@app.route('/404')
def index():
      return """<html><head><title>404 Not Found</title></head>
<body><center><h1>404 Not Found</h1></center>
<hr><center>nginx</center></body></html>"""
if __name__ == '__main__':
      app.run(debug=True,port=8088)

变量规则

@app.route()函数中添加URL时,该URL有时候是变化的,所以针对这种情况,可以构造有动态部分的URL,也可以在一个函数上添加多个规则。

在给URL添加变量部分时,可以把这些特殊的字段标记为<变量名>的形式,它将作为命名参数传递给函数。要给变量名的类型进行限制,可以用<变量类型:变量名>指定一个可选的类型转换器

from flask import Flask
app=Flask(__name__)

@app.route('/')
def index():
    return 'hello world'
@app.route('/user/<username>')
def show_user_profile(username):
    return f'用户名是:{username}'
@app.route('/post/<int:post_id>')
def show_post(post_id):
    return f'ID是{post_id}'
if __name__ == '__main__':
    app.run(debug=  True)

构造URL

使用url_for()函数来给指定的函数构造URL。其第一个参数是函数名,其余参数会添加到URL末尾作为查询参数

from flask import *
app=Flask(__name__)

@app.route('/')
def index():
    return redirect(url_for('show_user_profile',username='bill'))
@app.route('/user/<username>')
def show_user_profile(username):
    return f'用户名是:{username}'
@app.route('/post/<int:post_id>')
def show_post(post_id):
    return f'ID是{post_id}'
if __name__ == '__main__':
    app.run(debug=  True)

HTTP方法

from flask import *
app=Flask(__name__)

@app.route('/',methods=['GET','POST'])
def index():
    if request.method=='POST':
        return redirect(url_for('show_user_profile',username='bill'))
    else:
        return "Hello"
@app.route('/user/<username>')
def show_user_profile(username):
    return f'用户名是:{username}'
@app.route('/post/<int:post_id>')
def show_post(post_id):
    return f'ID是{post_id}'
if __name__ == '__main__':
    app.run(debug=  True)

模板

模板是一个包含响应文本的文件,其中包含占位变量的动态部分,其具体值只在请求的上下文才知道。

渲染模板

语法格式

render_template('temprender.html',username=name)

Flask程序默认在templates子文件中找模板

from flask import Flask,url_for,render_template

app=Flask(__name__)
@app.route('/')
def index():
    title="Flask"
    msg="你好"
    return render_template('index.html',title=title,msg=msg)
if __name__ == '__main__':
    app.run()

模板变量

{{name}}表示一个变量,是一种特殊的占位符。也可以是列表、字典和对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eCVeZghw-1668830160570)(https://s2.loli.net/2022/11/19/8YlEPiwKkI5LrZx.png)]

还有常用过滤器

<!doctype HTML>
<html>
    <head>
        <title>{{title}}</title></head>
    <body><h1><center>{{msg|upper}}</center></h1></body>
</html>
名称说明
safe渲染时不转义
capitalize把值得首字母转为大写,其它字母转为小写
lower把值转为小写
upper把值转换为大写形式
title把值中每个单词的首单词都转换为大写
trim把值的首尾空格去掉
striptages渲染之前把值中所有的HTML标签都删掉

控制结构

from flask import Flask, url_for, render_template

app = Flask(__name__)


@app.route('/')
def index():
    title = "Flask"
    user=""
    return render_template('index.html', title=title,user=user)


if __name__ == '__main__':
    app.run()
<!doctype HTML>
<html>
    <head>
        <title>{{title}}</title></head>
    <body><h1>{% if user %}{{user}}{% else %}no user{% endif %}</h1></body>
</html>

Web表单

pip install flask-wtf

表单类

使用Flask-WTF时候,每个Web表单都继承自Form的类表示

例如

from flask_wtf import FlaskForm
from wtforms import *
from wtforms.validators import DataRequired
class NameForm(FlaskForm):\
    name=StringField('请输入姓名',validators=DataRequired())
    passwd=PasswordField('请输入密码',validators=DataRequired())
    sumbmit=SubmitField("提交")

当然WTForms支持其它HTML标准字段

字段类型说明
StringField文本字段
TextAreaField多行文本字段
PasswordFiled密码文本字段
HiddenField隐藏文本字段
DateField文本字段,值为datetime.date格式
DateTimeField文本字段,值为datetime.datetime格式
IntegerField文本字段,值为整数
DecimalField文本字段,值为decimal.Decimal格式
FloatField文本字段,值为浮点数
BooleanField复选框,值为True或False
RadioField一组单选按钮
SelectFiled下拉列表
SelectMultipleField下拉列表,可选择多个值
FileField文件上传字段
SubmitFiled表单提交按钮
FormFiled把表单作为字段嵌入另一个表单内
FieldList一组指定类型的字段

WTForms内置的验证函数

字段类型说明
Email验证电子邮箱地址
EqualTo比较两个字段的值,常用于比较输入两次密码进行确认的情况
IPAdress验证IPv4地址
Length验证输入字符串的长度
NumberRange验证输入的值的在数字范围内
Optional无输入值时跳过其他验证函数
Required确保字段中有数据
Regexp使用正则表达式验证输入值
URL验证URL
AnyOf确保输入值在可选列表中

把表单渲染成HTML

models.py

from flask_wtf import FlaskForm
from wtforms import *
from wtforms.validators import DataRequired, Length


class LoginForm(FlaskForm):
    name = StringField(label='用户名', validators=[DataRequired("用户名不能为空"),
                                                   Length(max=10, min=3, message="用户名要大于3且小于10")])
    password = PasswordField(label='密码', validators=[DataRequired("密码不能为空"),
                                                       Length(max=15, min=6, message="密码长度大于6且小于15")])
    submit = SubmitField(label="提交")

main.py

from flask import *
from models import LoginForm

app = Flask(__name__)
app.config['SECRET_KEY'] ="HELLO"


@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        username = form.name.data
        password = form.password.data
        if username == "bill" and password =="myfile12":
            return redirect(url_for('index'))
    return render_template("login.html",form=form)


@app.route('/')
def index():
    return render_template("index.html", title="首页", user="用户")


if __name__ == '__main__':
    app.run(debug=True)
<!doctype html>
<html>
    <head>
        <title>登录</title>
    </head>
    <body> 
        <center>表单</center><hr>
        <form action="" method="post">
            {{form.name.label}}
            {{form.name()}}
            {% for err in form.name.errors %}
            <p style="color: red">{{err}}</p>
            {% endfor %}
            {{form.password.label}}
            {{form.password()}}
            {% for err in form.password.errors %}
            <p style="color: red">{{err}}</p>
            {% endfor %}
            {{form.csrf_token}}
            {{form.submit()}}
        </form>
    </body>
</html>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值