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 """404 Not Found

404 Not Found


nginx
"""
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/')
def show_user_profile(username):
    return f'用户名是:{username}'
@app.route('/post/')
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/')
def show_user_profile(username):
    return f'用户名是:{username}'
@app.route('/post/')
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/')
def show_user_profile(username):
    return f'用户名是:{username}'
@app.route('/post/')
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>

你可能感兴趣的:(flask,python,后端)