经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
大白话说Python+Flask入门(三)
来源:cnblogs  作者:久曲健  时间:2023/11/20 8:56:35  对本文有异议

写在前面

今天状态很不好,我发现学这部分知识的时候,会出现溜号或者注意力无法集中的情况。

我能想到的是,大概率是这部分知识,应该是超出了我现在的水平了,也就是说我存在知识断层了,整体感觉真的是一知半解。

那有同学会问了,那你能说明白吗?

我理解的肯定能呀,来往下看!

Flask的使用

1、消息闪现的使用

这块只能算是明白了大概,并没有算是真正的理解,待后续写多了,我再回来补充(当时感觉还是spring boot好),还是老规矩上代码。

模版文件index.html,示例代码如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>index </title>
  6. </head>
  7. <body>
  8. {% with messages = get_flashed_messages() %}
  9. {% if messages %}
  10. {% for message in messages %}
  11. {{ message }}
  12. {% endfor %}
  13. {% endif %}
  14. {% endwith %}
  15. <h3>Welcome!</h3>
  16. <a href = "{{ url_for('login') }}">login</a>
  17. </body>
  18. </html>

模版文件login_demo.html,示例代码如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>login demo</title>
  6. </head>
  7. <body>
  8. <form action="http://localhost:8888/login" method="post">
  9. username:<input type="text" name="username"><br>
  10. password:<input type="password" name="password"><br>
  11. <input type="submit" value="login"><br>
  12. </form>
  13. {% if error %}
  14. <p><strong>Error: </strong> {{ error }}</p>
  15. {% endif %}
  16. </body>
  17. </html>

逻辑部分,示例代码如下:

  1. from flask import Flask, request, url_for, redirect, render_template, flash
  2. app = Flask(__name__)
  3. @app.route('/')
  4. def index():
  5. return render_template('index.html')
  6. @app.route('/login', methods=['POST', 'GET'])
  7. def login():
  8. error = None
  9. if request.method == 'POST':
  10. if request.form['username'] == 'admin' and request.form['password'] == 'admin':
  11. flash('登录成功!')
  12. return redirect(url_for('index'))
  13. else:
  14. error = 'login failed'
  15. return render_template('login_demo.html', error=error)
  16. if __name__ == '__main__':
  17. app.run(host='0.0.0.0', port=8888, debug=False)

效果:

知识点:

  • 可以理解为闪现消息是向用户反馈信息,更好的诠释了交互的重要性,即我操作后,马上会给我反馈信息,当且仅当仅在下一次请求时访问它,便会与布局模板结合展示消息。
  • flash(message, category):message 是要闪现的实际消息,category 可选。它可以是“error”,“info”或“warning”。
  • get_flashed_messages(with_categories, category_filter):两个参数都是可选参数。如果接收到的消息具有类别,则第一个参数是元组。第二个参数仅用于显示特定消息。
  • {% if error %}{% 这里写代码 %},用这个包裹
  • {{ message }}: {{ 变量 }},插值表达式和Jmeter类似用于取值

2、使用Flask 发送邮件

安装依赖:

pip install Flask-Mail

没啥可说的,就是发送邮件功能,这里我用qq邮箱为例,示例代码如下:

  1. from flask import Flask
  2. from flask_mail import Mail, Message
  3. app = Flask(__name__)
  4. app.config['MAIL_SERVER'] = 'smtp.qq.com'
  5. app.config['MAIL_PORT'] = 465
  6. app.config['MAIL_USERNAME'] = 'your@qq.com'
  7. app.config['MAIL_PASSWORD'] = '你生成的授权码'
  8. app.config['MAIL_USE_TLS'] = False
  9. app.config['MAIL_USE_SSL'] = True
  10. mail = Mail(app)
  11. @app.route("/")
  12. def index():
  13. msg = Message('Hello', sender='your@qq.com', recipients=['接收人邮箱'])
  14. msg.body = "Hello Flask message sent from Flask-Mail"
  15. mail.send(msg)
  16. return "Sent Success!"
  17. if __name__ == '__main__':
  18. app.run(host='0.0.0.0', port=8888, debug=False)

效果:

image.png

知识点:

1、mail = Mail(app):构造函数

2、Mail类的方法:

  • send(): 发送Message类对象的内容
  • connect(): 建立与邮件主机连接
  • send_message(): 发送消息对象

3、Message类方法

attach() - 为邮件添加附件。此方法采用以下参数:

  • filename - 要附加的文件的名称
  • content_type - MIME类型的文件
  • data - 原始文件数据
  • 处置 - 内容处置(如果有的话)。

add_recipient() - 向邮件添加另一个收件人

3、Flask WTF的使用

安装依赖

pip install flask-WTF

举个栗子

主要用于表单的处理验证,先上模版loginForm.html代码,如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>login Form Demo</title>
  6. </head>
  7. <body>
  8. {#这里将用来展示渲染的数据模版#}
  9. <form method="post">
  10. {{ form.username.label }} {{ form.username }} <br>
  11. {{ form.password.label }} {{ form.password }} <br>
  12. {{ form.address.label }} {{ form.address }} <br>
  13. {{ form.email.label }} {{ form.email }} <br>
  14. {{ form.remember.label }} {{ form.remember }} <br>
  15. {{ form.submit}} <br>
  16. </form>
  17. </body>
  18. </html>

表单参数loginForm.py示例代码如下:

  1. # -*- coding: utf-8 -*-
  2. # @Time : 2023/11/19 16:40
  3. # @Author : longrong.lang
  4. # @FileName: loginForm.py
  5. # @Software: PyCharm
  6. # @Cnblogs :https://www.cnblogs.com/longronglang
  7. # @Motto:你只管努力,剩下的交给天意.
  8. from flask_wtf import FlaskForm
  9. from wtforms import StringField, PasswordField, SubmitField, BooleanField, TextAreaField, EmailField
  10. from wtforms.validators import DataRequired, Length
  11. class LoginForm(FlaskForm):
  12. username = StringField('用户名:', validators=[DataRequired('请输入用户名')])
  13. password = PasswordField('密码:', validators=[DataRequired('请输入密码')])
  14. address = TextAreaField('地址:')
  15. email = EmailField('邮箱:',validators=[Length(10,50)])
  16. remember = BooleanField('记住我')
  17. submit = SubmitField('提交')

逻辑代码示例,如下:

  1. from flask import Flask, flash, render_template, request
  2. from flask_case.loginForm import LoginForm
  3. app = Flask(__name__)
  4. app.secret_key = 'secret_key'
  5. @app.route('/login', methods=['GET', 'POST'])
  6. def login():
  7. login_form = LoginForm()
  8. username = request.form.get("username")
  9. password = request.form.get("password")
  10. # 验证表单
  11. if username == 'admin' and password == 'admin':
  12. return "login success"
  13. else:
  14. flash("参数有误或者不完整")
  15. return render_template('loginForm.html', form=login_form)
  16. return render_template('loginForm.html', form=login_form)
  17. if __name__ == '__main__':
  18. app.run(host='0.0.0.0', port=8888, debug=False)

效果:

知识点:

1、 CSRF 校验处理的两种方式:

  1. app.config['WTF_CSRF_ENABLED'] = False #直接关闭
  2. app.secret_key = 'secret_key' #直接加上

自动创建CSRF令牌的隐藏字段。这是为了防止Cross Site Request Forgery(跨站请求伪造)攻击,所以加上!

2、WTforms表单字段含义:

  • TextField :表示<input type ='text'> HTML表单元素
  • BooleanField:表示<input type ='checkbox'> HTML表单元素
  • DecimalField:用于显示带小数的数字的文本字段
  • IntegerField:用于显示整数的文本字段
  • RadioField:表示<input type = 'radio'> HTML表单元素
  • SelectField:表示选择表单元素
  • TextAreaField:表示<textarea> HTML表单元素
  • PasswordField:表示<input type = 'password'> HTML表单元素
  • SubmitField:表示<input type = 'submit'>表单元素

3、validators: 常用验证的使用:

  • DataRequired:检查输入字段是否为空
  • Email:检查字段中的文本是否遵循电子邮件ID约定
  • IPAddress:在输入字段中验证IP地址
  • Length:验证输入字段中的字符串的长度是否在给定范围内
  • NumberRange:验证给定范围内输入字段中的数字
  • URL:验证在输入字段中输入的URL

写在最后

整个学习过程大约4个小时(也许是消化了),好像突然悟了,能根据理解写出来,但是感觉还是欠一些火候的,个人感觉还是练得少。

值得一提的是,学习这东西,真的就是一种感觉,进入“心流”吧。

看过黑子的篮球的同学应该知道Zone吧,就是那种随心所欲的感觉。

image.png

怎么说呢,就是在拉伸区的效果最好,舒适区是无用功,所以找到自己的拉伸区就显得格外重要了。

有些同学会问,那什么是拉伸区,就是舒适区边缘。

那怎么找呀?等我掌握方法的,我会写出来!

我是六哥,觉得文章好,请给我个赞呗!

原文链接:https://www.cnblogs.com/longronglang/p/17842403.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号