900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Flask框架web开发(黑马程序员版本)学习笔记

Flask框架web开发(黑马程序员版本)学习笔记

时间:2023-08-07 22:16:28

相关推荐

Flask框架web开发(黑马程序员版本)学习笔记

-00- 初识Flask

中文文档:/docs/flask/

英文文档:/docs/0.12/

-01- 第一个Flask程序

# -*- coding: utf-8 -*-#1.导入Flask扩展from flask import flask#2.创建应用程序实例#需要传入_name_,作用是为了确定资源所在的路径app = Flask(_name_)#3.定义路由及视图函数#Flask中定义路由器是通过装饰器实现的@app.route('/')def index():return 'hello flask'#4.启动程序if __name__ == '__main__':#执行app.run,就会将Flask程序运行在一个简易的服务器(Flask提供的,用于测试的)app.run()

-02- 路由请求方式限定(权限规定)

#默认只支持GET请求,如果需要用其他请求,需要自行添加。#用postman进行接口请求测试,测试网址可以使用。@app.route('/',methods=["GET", "POST"])def index():return 'hello flask'

-03- 路由参数处理(翻书操作)

#同一视图函数传入不同的参数#<>定义路由的参数,<>内需要起个名字@app.route('/orders/<order_id>')def get_order_id(order_id):#参数类型,默认是字符串print type(order_id)#需要在视图函数的括号内填入参数名字,后面的代码才能使用return 'order_id %s' % order_id#有的时候,需要对路由做访问优化,订单ID应该是int类型@app.route('/orders/<int:order_id>')

-04- Jinja2模板引擎

如何返回一个网页(模板)

# *-*coding:utf-8*-*from flask import Flask,render_templateapp = Flask(__name__)#1.如何返回一个网页(模板)@app.route("/")def index():return render_template("index.html")if __name__ == '__main__':app.run()

如何给模板填充数据(服务器动态计算)

首先要新建一个HTML文件,作为网站的首页。然后在主程序中import函数render_template来对HTML进行渲染,render_template函数的第一个参数是模板文件名,后面的参数都是键值对,表示模板中变量对应的真实值。

# *-*coding:utf-8*-*from flask import Flask,render_templateapp = Flask(__name__)#2.如何给模板填充数据(服务器动态计算)@app.route("/")def index():#比如需要传入网址 url_str = '' return render_template("index.html",url_str=url_str)#前面是值,后面是名字if __name__ == '__main__':app.run()

用键值对传入参数,然后在HTML文件中用两个花括号来使用这个变量。

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body>这是一个模板<br>这是一个标签<br>{{url_str }}<br></body></html>

-05- 变量代码块的使用

在Jinja2中,使用{# #}进行注释,快捷键Ctrl + /

使用{{ }} 来表示变量名,这种语法叫做变量代码块

def index():#比如需要传入网址、列表、字典 url_str = '' my_list = [1, 2, 3, 4]my_dict = {"name": "zyt", "keywords":"lucky" }#通常模板中使用的变量名和要传递的数据的变量名保持一致return render_template("index.html",url_str=url_str,my_list=my_list,my_dict=my_dict)

<body>这是一个模板<br>这是一个标签<br>{#下面是一个变量代码块的使用#}{{url_str }}<br>{# 列表的使用#}{{my_list }}<br>{{my_list.2 }}<br>{{my_list[2] }}<br>{# 字典的使用#}{{my_dict }}<br>{{my_dict.name }}<br>{{my_dict["name"] }}<br></body>

-06- 控制代码块的使用

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

-07- 过滤器的使用

常见内建过滤器

safe:禁用转义

capitalize:单词的首字母大写

lower和upper:大小写转换

title:一句话中每个单词的首字母大写

reverse:翻转

truncate:字符截断

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

-08- 普通的表单验证 + flash消息闪现

在html页面中直接写form表单

<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>

视图函数中获取表单数据

# *-*coding:utf-8*-*from flask import Flask,render_template,requestapp = Flask(__name__)app.secret_key = 'itheima''''目的:实现一个简单的登录的逻辑处理1.路由需要有get和post两种请求方式————>需要判断请求方式2.获取请求参数3.判断参数是否填写 & 密码是否相同4.如果判断都没有问题,就返回一个success''''''给模板传递消息flash ————>需要对内容加密,因此需要设置secret_key,做加密消息的混淆模板中需要遍历消息'''@app.route("/",methods=['get','post'])def index():#request:请求对象 ————> 获取请求方式、数据#1.判断请求方式if request.method =='post':#2.获取请求参数username = request.form.get('username')password = request.form.get('password')password2 = request.form.get('password2')#3.判断参数是否填写 & 密码是否相同if not all([username,password,password2]):# print '参数不完整'flash(u'参数不完整')elif password != password2:# print '密码不一致'flash(u'密码不一致')else :return 'success'return render_template("index.html")if __name__ == '__main__':app.run()

-09- 使用Flask-WTF实现表单+逻辑验证

模板页面:

<form method="post">{# 开启CSRF_TOKEN #}{{form.csrf_token }}{{form.username.label }}{{form.username }}<br>{{form.password.label }}{{form.password }}<br>{{form.password2.label }}{{form.password2 }}<br>{{form.submit}}</form>

视图函数

from flask_wtf import FlaskFormfrom wtfforms import StringField,PasswordField,SubmitField# 解决编码问题import sysreload(sys)sys.setdefaultencoding("utf-8")'''使用WTF实现表单自定义表单类'''class LoginForm(FlaskForm):username = StringField('用户名',validators = [DataRequired()])password = PasswordField('密码',validators = [DataRequired()])password2 = PasswordField('确认密码',validators = [DataRequired(),EqualTo('password','密码填入不一致')])submit = SubmitField('提交')@app.route('/form', methods=['get','post'])def login():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_tokenif login_form.validate_on_submit():print username, passwordreturn 'success'else:flash('参数有误')return render_template('index.html', form=login_form)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。