ToB企服应用市场:ToB评测及商务社交产业平台

标题: 大白话说Python+Flask入门(三) [打印本页]

作者: 玛卡巴卡的卡巴卡玛    时间: 2023-12-31 15:10
标题: 大白话说Python+Flask入门(三)
写在前面

今天状态很不好,我发现学这部分知识的时候,会出现溜号或者注意力无法集中的情况。
我能想到的是,大概率是这部分知识,应该是超出了我现在的水平了,也就是说我存在知识断层了,整体感觉真的是一知半解。
那有同学会问了,那你能说明白吗?
我理解的肯定能呀,来往下看!
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 target="_blank" 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)
复制代码
效果:

知识点:
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)
复制代码
效果:

知识点:
1、mail = Mail(app):构造函数
2、Mail类的方法:
3、Message类方法
attach() - 为邮件添加附件。此方法采用以下参数:
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表单字段含义:
3、validators: 常用验证的使用:
写在最后

整个学习过程大约4个小时(也许是消化了),好像突然悟了,能根据理解写出来,但是感觉还是欠一些火候的,个人感觉还是练得少。
值得一提的是,学习这东西,真的就是一种感觉,进入“心流”吧。
看过黑子的篮球的同学应该知道Zone吧,就是那种随心所欲的感觉。

怎么说呢,就是在拉伸区的效果最好,舒适区是无用功,所以找到自己的拉伸区就显得格外重要了。
有些同学会问,那什么是拉伸区,就是舒适区边缘。
那怎么找呀?等我掌握方法的,我会写出来!
我是六哥,觉得文章好,请给我个赞呗!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4