今天狀態很不好,我發現學這部分知識的時候,會出現溜號或者注意力無法集中的情況。
我能想到的是,大概率是這部分知識,應該是超出了我現在的水平了,也就是說我存在知識斷層了,整體感覺真的是一知半解。
那有同學會問了,那你能說明白嗎?
我理解的肯定能呀,來往下看!
這塊只能算是明白了大概,並沒有算是真正的理解,待後續寫多了,我再回來補充(當時感覺還是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
類似用於取值安裝依賴:
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'] = '[email protected]'
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='[email protected]', 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
類的方法:
3、Message
類方法
attach()
- 為郵件新增附件。此方法採用以下引數:
filename
- 要附加的檔案的名稱content_type
- MIME型別的檔案data
- 原始檔案資料處置
- 內容處置(如果有的話)。add_recipient() - 向郵件新增另一個收件人
安裝依賴
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表單欄位含義:
<input type ='text'>
HTML表單元素<input type ='checkbox'>
HTML表單元素<input type = 'radio'>
HTML表單元素<textarea>
HTML表單元素<input type = 'password'>
HTML表單元素<input type = 'submit'>
表單元素3、validators: 常用驗證的使用:
整個學習過程大約4個小時(也許是消化了),好像突然悟了,能根據理解寫出來,但是感覺還是欠一些火候的,個人感覺還是練得少。
值得一提的是,學習這東西,真的就是一種感覺,進入「心流」吧。
看過黑子的籃球的同學應該知道Zone
吧,就是那種隨心所欲的感覺。
怎麼說呢,就是在拉伸區的效果最好,舒適區是無用功,所以找到自己的拉伸區就顯得格外重要了。
有些同學會問,那什麼是拉伸區,就是舒適區邊緣。
那怎麼找呀?等我掌握方法的,我會寫出來!
我是六哥,覺得文章好,請給我個讚唄!
優秀不夠,你是否無可替代
軟體測試交流QQ群:721256703,期待你的加入!!
歡迎關注我的微信公眾號:軟體測試君