大白话说Python+Flask入门(三)
寫在前面
今天狀態很不好,我發現學這部分知識的時候,會出現溜號或者注意力無法集中的情況。
我能想到的是,大概率是這部分知識,應該是超出了我現在的水平了,也就是說我存在知識斷層了,整體感覺真的是一知半解。
那有同學會問了,那你能說明白嗎?
我理解的肯定能呀,來往下看!
Flask的使用
1、消息閃現的使用
這塊只能算是明白了大概,并沒有算是真正的理解,待后續寫多了,我再回來補充(當時感覺還是spring boot好),還是老規矩上代碼。
模版文件index.html,示例代碼如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index </title>
</head>
<body>
{% with messages = get_flashed_messages() %}
{% if messages %}
{% for message in messages %}
{{ message }}
{% endfor %}
{% endif %}
{% endwith %}
<h3>Welcome!</h3>
<a href = "{{ url_for('login') }}">login</a>
</body>
</html>
模版文件login_demo.html,示例代碼如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login demo</title>
</head>
<body>
<form action="http://localhost:8888/login" method="post">
username:<input type="text" name="username"><br>
password:<input type="password" name="password"><br>
<input type="submit" value="login"><br>
</form>
{% if error %}
<p><strong>Error: </strong> {{ error }}</p>
{% endif %}
</body>
</html>
邏輯部分,示例代碼如下:
from flask import Flask, request, url_for, redirect, render_template, flash
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/login', methods=['POST', 'GET'])
def login():
error = None
if request.method == 'POST':
if request.form['username'] == 'admin' and request.form['password'] == 'admin':
flash('登錄成功!')
return redirect(url_for('index'))
else:
error = 'login failed'
return render_template('login_demo.html', error=error)
if __name__ == '__main__':
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郵箱為例,示例代碼如下:
from flask import Flask
from flask_mail import Mail, Message
app = Flask(__name__)
app.config['MAIL_SERVER'] = 'smtp.qq.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USERNAME'] = 'your@qq.com'
app.config['MAIL_PASSWORD'] = '你生成的授權碼'
app.config['MAIL_USE_TLS'] = False
app.config['MAIL_USE_SSL'] = True
mail = Mail(app)
@app.route("/")
def index():
msg = Message('Hello', sender='your@qq.com', recipients=['接收人郵箱'])
msg.body = "Hello Flask message sent from Flask-Mail"
mail.send(msg)
return "Sent Success!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8888, debug=False)
效果:
知識點:
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代碼,如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login Form Demo</title>
</head>
<body>
{#這里將用來展示渲染的數據模版#}
<form method="post">
{{ form.username.label }} {{ form.username }} <br>
{{ form.password.label }} {{ form.password }} <br>
{{ form.address.label }} {{ form.address }} <br>
{{ form.email.label }} {{ form.email }} <br>
{{ form.remember.label }} {{ form.remember }} <br>
{{ form.submit}} <br>
</form>
</body>
</html>
表單參數loginForm.py示例代碼如下:
# -*- coding: utf-8 -*-
# @Time : 2023/11/19 16:40
# @Author : longrong.lang
# @FileName: loginForm.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
# @Motto:你只管努力,剩下的交給天意.
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, BooleanField, TextAreaField, EmailField
from wtforms.validators import DataRequired, Length
class LoginForm(FlaskForm):
username = StringField('用戶名:', validators=[DataRequired('請輸入用戶名')])
password = PasswordField('密碼:', validators=[DataRequired('請輸入密碼')])
address = TextAreaField('地址:')
email = EmailField('郵箱:',validators=[Length(10,50)])
remember = BooleanField('記住我')
submit = SubmitField('提交')
邏輯代碼示例,如下:
from flask import Flask, flash, render_template, request
from flask_case.loginForm import LoginForm
app = Flask(__name__)
app.secret_key = 'secret_key'
@app.route('/login', methods=['GET', 'POST'])
def login():
login_form = LoginForm()
username = request.form.get("username")
password = request.form.get("password")
# 驗證表單
if username == 'admin' and password == 'admin':
return "login success"
else:
flash("參數有誤或者不完整")
return render_template('loginForm.html', form=login_form)
return render_template('loginForm.html', form=login_form)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8888, debug=False)
效果:
知識點:
1、 CSRF 校驗處理的兩種方式:
app.config['WTF_CSRF_ENABLED'] = False #直接關閉
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吧,就是那種隨心所欲的感覺。
怎么說呢,就是在拉伸區的效果最好,舒適區是無用功,所以找到自己的拉伸區就顯得格外重要了。
有些同學會問,那什么是拉伸區,就是舒適區邊緣。
那怎么找呀?等我掌握方法的,我會寫出來!
我是六哥,覺得文章好,請給我個贊唄!
總結
以上是生活随笔為你收集整理的大白话说Python+Flask入门(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 视野修炼-技术周刊第62期
- 下一篇: kubernetes container