一.首先安装Flask框架

在项目的终端下输入安装命令:

pip install flask

二.Flask基础

1.从最简单的开始,学会输出Hello Python

示例:

from flask import Flask

app = Flask(__name__)

@app.route("/")

def index():

return "Hello Python"

if __name__=='__main__':

app.run()

运行的结果:

 直接点击网址http://127.0.0.1:5000或者在浏览器输入网址http://127.0.0.1:5000

跳转的页面显示:

2.开启调试模式

run()方法虽然可以开启本地服务器,不过每次修改代码后都要手动重启它,相当麻烦,这时候可以开启调试模式run(debug=True)

示例:

app.run(debug=True)

运行后的结果显示Debugger is active:

 

还可以设置端口号

示例:

app.run(debug=True,port=8000)

运行后的结果显示:

 可以发现端口号从原来的5000改为了8000

3.路由  

使用@app.route装饰器声明路由

这个表示的是username是变量且username的类型只能是string

这个表示的是username是变量且username的类型不受限

这个表示的是password是变量且password的类型只能是int

通过代码示例来讲解:

from flask import Flask

app = Flask(__name__)

@app.route("/")

def index():

return "Hello Python"

@app.route("/login/")

def loginName(username):

return f'用户名是:{username}'

@app.route("/login//")

def login(username,password):

return f'用户名:{username},密码:{password}'

if __name__=='__main__':

app.run(debug=True,port=8000)

运行后在浏览器输入http://127.0.0.1:8000/login/suixiang

网页显示:

 运行后在浏览器输入http://127.0.0.1:8000/login/suixiang/123456

4.url_for()函数

该函数用于队指定的函数构造URL,它的第一个参数是函数名,其他参数会作为该函数的URL的查询参数

示例:

from flask import Flask

app = Flask(__name__)

@app.route("/")

def index():

return "Hello Python"

@app.route("/login/")

def loginName(username):

return f'用户名是:{username}'

@app.route("/login//")

def login(username,password):

return f'用户名:{username},密码:{password}'

if __name__=='__main__':

app.run(debug=True,port=8000)

在这代码中

#返回loginName函数中的路由/loginName/suixiang

url_for('loginName',username='suixiang') 

url_for结合redirect()函数使用,所以

示例:

from flask import Flask,url_for,redirect

app = Flask(__name__)

@app.route("/")

def index():

return "Hello Python"

@app.route("/login/")

def loginName(username):

return f'用户名是:{username}'

@app.route("/login//")

def login(username,password):

return f'用户名:{username},密码:{password}'

@app.route('/login/')

def urlFor(number):

if number > 100:

return redirect(url_for('loginName',username='suixiang'))

return "number <= 100"

if __name__=='__main__':

app.run(debug=True,port=8000)

如果在浏览器中输入网址为http://127.0.0.1:8000/login/23

因为不满足number > 100的条件

所以页面显示是:

如果在浏览器中输入网址为http://127.0.0.1:8000/login/223

由于number > 100 则会 redirect(url_for('loginName',username='suixiang'))

则跳转到http://127.0.0.1:8000/login/suixiang

 通过观察可以得知url_for就是通过函数名跳转到相应的url同时可以携带参数

三.Http方法

在默认的情况下路由只回应GET请求,可以通过route()装饰器的methods改变

示例:

from flask import Flask, request, redirect, url_for

app = Flask(__name__)

@app.route("/", methods=['GET', 'POST'])

def index():

if request.method == 'POST':

return redirect(url_for('login')) # 使用 url_for 来获取相对路径的 URL

else:

return redirect(url_for('login2')) # 重定向到 "/login2" 而不是仅仅调用函数

@app.route("/login")

def login():

return "Flask Login"

@app.route("/login2")

def login2():

return "Login2"

if __name__ == "__main__":

app.run(debug=True, port=8000)

四.渲染模版

Flask在程序的文件夹的templates子文件夹中寻找模版,使用render_template()函数渲染模版 ,而templates中一般存放的是html文件,渲染模版说白了就是通过render_template()函数传递参数给html显示

在templates中创建login.html

示例:

main.py内容:

from flask import Flask, request, redirect, url_for,render_template

app = Flask(__name__)

@app.route("/", methods=['GET', 'POST'])

def login():

username = 'suixiang'

password = '123456'

return render_template('login.html', username=username, password=password)

if __name__ == "__main__":

app.run(debug=True)

login.html内容:

用户登录

用户名:{{username}}

密码:{{password}}

运行后的页面显示:

五.Web表单

CSRF是跨站请求伪造,Flask_WTF可以保护所有表单免受CSRF攻击,Flask_WTF需要程序设置一个密钥。密钥生成加密令牌,令牌验证请求中表单数据的真伪

设置密钥的示例:

app.config['SECRET_KEY'] = 'secret_flask'

1.wtforms支持常用的HTML标准字段

类型说明StringField文本TextAreaField多行文本PasswordField密码文本HiddenField隐藏文本IntegerField整数文本FloatField浮点数文本BooleanField复选框,True或FlaseRadioField一组单选按钮SelectField下拉单选SelectMultipleField下拉多选SubmitField表单提交按钮DateField文本,值为datetime.dateDateTimeField文本,值为datetime.datetimeDecimalField文本,值为decimal,Decimal

2.wtforms支持的内置验证函数

类型说明Length长度设置Email验证邮箱格式EqualTo比较两个字段的值Optional无输入值时跳过其他验证函数NumberRange验证输入的值在数字范围内Required确保字段中有数值Regexp使用正则表达式验证输入值

3.Web表单示例: 

validators指定一个由验证函数组成的列表

文件结构:

main.py:

from flask import Flask, redirect, url_for,render_template

from flask_wtf import FlaskForm

from wtforms import StringField, SubmitField, PasswordField

from wtforms.validators import Length

app = Flask(__name__)

app.config['SECRET_KEY'] = 'secret'

class LoginForm(FlaskForm):

username = StringField(label = '用户名',validators = [Length(max=10,min=3,message = '密码不能少于6位且不能大于10位')])

password = PasswordField(label = '密码',validators = [Length(max=10,min=6,message = '密码不能少于6位且不能大于10位')])

submit = SubmitField(label='提交')

@app.route("/")

def index():

success = "登录成功!"

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

@app.route("/login", methods=['GET', 'POST'])

def login():

form = LoginForm()

if form.validate_on_submit():

username = form.username.data

password = form.password.data

print(username)

print(password)

if username == "suixiang" and password == "secret":

return redirect(url_for('index'))

return render_template('login.html', form = form)

if __name__ == "__main__":

app.run(debug=True)

index.html:

首页

{{success}}

login.html:

用户登录

{{form.username.label}}:{{form.username}}

{{form.password.label}}:{{form.password}}

{{form.csrf_token}}

{{form.submit}}

 运行后在浏览器中输入网址http://127.0.0.1:5000/login

页面显示

用户名输入:suixiang

密码输入:secret

点击提交后就会跳转到index.html

显示:

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: