日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

大白话说Python+Flask入门(三)

發(fā)布時(shí)間:2023/11/20 51 coder
生活随笔 收集整理的這篇文章主要介紹了 大白话说Python+Flask入门(三) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

寫在前面

今天狀態(tài)很不好,我發(fā)現(xiàn)學(xué)這部分知識的時(shí)候,會出現(xiàn)溜號或者注意力無法集中的情況。

我能想到的是,大概率是這部分知識,應(yīng)該是超出了我現(xiàn)在的水平了,也就是說我存在知識斷層了,整體感覺真的是一知半解。

那有同學(xué)會問了,那你能說明白嗎?

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

Flask的使用

1、消息閃現(xiàn)的使用

這塊只能算是明白了大概,并沒有算是真正的理解,待后續(xù)寫多了,我再回來補(bǔ)充(當(dāng)時(shí)感覺還是spring boot好),還是老規(guī)矩上代碼。

模版文件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)

效果:

知識點(diǎn):

  • 可以理解為閃現(xiàn)消息是向用戶反饋信息,更好的詮釋了交互的重要性,即我操作后,馬上會給我反饋信息,當(dāng)且僅當(dāng)僅在下一次請求時(shí)訪問它,便會與布局模板結(jié)合展示消息。
  • flash(message, category):message 是要閃現(xiàn)的實(shí)際消息,category 可選。它可以是“error”,“info”或“warning”。
  • get_flashed_messages(with_categories, category_filter):兩個(gè)參數(shù)都是可選參數(shù)。如果接收到的消息具有類別,則第一個(gè)參數(shù)是元組。第二個(gè)參數(shù)僅用于顯示特定消息。
  • {% if error %}{% 這里寫代碼 %},用這個(gè)包裹
  • {{ message }}: {{ 變量 }},插值表達(dá)式和Jmeter類似用于取值

2、使用Flask 發(fā)送郵件

安裝依賴:

pip install Flask-Mail

沒啥可說的,就是發(fā)送郵件功能,這里我用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'] = '你生成的授權(quán)碼'
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)

效果:

知識點(diǎn):

1、mail = Mail(app):構(gòu)造函數(shù)

2、Mail類的方法:

  • send(): 發(fā)送Message類對象的內(nèi)容
  • connect(): 建立與郵件主機(jī)連接
  • send_message(): 發(fā)送消息對象

3、Message類方法

attach() - 為郵件添加附件。此方法采用以下參數(shù):

  • filename - 要附加的文件的名稱
  • content_type - MIME類型的文件
  • data - 原始文件數(shù)據(jù)
  • 處置 - 內(nèi)容處置(如果有的話)。

add_recipient() - 向郵件添加另一個(gè)收件人

3、Flask WTF的使用

安裝依賴

pip install flask-WTF

舉個(gè)栗子

主要用于表單的處理驗(yàn)證,先上模版loginForm.html代碼,如下:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>login Form Demo</title>
  </head>
  <body>
    {#這里將用來展示渲染的數(shù)據(jù)模版#}
    <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>

表單參數(shù)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")
    # 驗(yàn)證表單
    if username == 'admin' and password == 'admin':
        return "login success"
    else:
        flash("參數(shù)有誤或者不完整")
        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)

效果:

知識點(diǎn):

1、 CSRF 校驗(yàn)處理的兩種方式:

app.config['WTF_CSRF_ENABLED'] = False #直接關(guān)閉
app.secret_key = 'secret_key' #直接加上

自動創(chuàng)建CSRF令牌的隱藏字段。這是為了防止Cross Site Request Forgery(跨站請求偽造)攻擊,所以加上!

2、WTforms表單字段含義:

  • TextField :表示<input type ='text'> HTML表單元素
  • BooleanField:表示<input type ='checkbox'> HTML表單元素
  • DecimalField:用于顯示帶小數(shù)的數(shù)字的文本字段
  • IntegerField:用于顯示整數(shù)的文本字段
  • RadioField:表示<input type = 'radio'> HTML表單元素
  • SelectField:表示選擇表單元素
  • TextAreaField:表示<textarea> HTML表單元素
  • PasswordField:表示<input type = 'password'> HTML表單元素
  • SubmitField:表示<input type = 'submit'>表單元素

3、validators: 常用驗(yàn)證的使用:

  • DataRequired:檢查輸入字段是否為空
  • Email:檢查字段中的文本是否遵循電子郵件ID約定
  • IPAddress:在輸入字段中驗(yàn)證IP地址
  • Length:驗(yàn)證輸入字段中的字符串的長度是否在給定范圍內(nèi)
  • NumberRange:驗(yàn)證給定范圍內(nèi)輸入字段中的數(shù)字
  • URL:驗(yàn)證在輸入字段中輸入的URL

寫在最后

整個(gè)學(xué)習(xí)過程大約4個(gè)小時(shí)(也許是消化了),好像突然悟了,能根據(jù)理解寫出來,但是感覺還是欠一些火候的,個(gè)人感覺還是練得少。

值得一提的是,學(xué)習(xí)這東西,真的就是一種感覺,進(jìn)入“心流”吧。

看過黑子的籃球的同學(xué)應(yīng)該知道Zone吧,就是那種隨心所欲的感覺。

怎么說呢,就是在拉伸區(qū)的效果最好,舒適區(qū)是無用功,所以找到自己的拉伸區(qū)就顯得格外重要了。

有些同學(xué)會問,那什么是拉伸區(qū),就是舒適區(qū)邊緣。

那怎么找呀?等我掌握方法的,我會寫出來!

我是六哥,覺得文章好,請給我個(gè)贊唄!

總結(jié)

以上是生活随笔為你收集整理的大白话说Python+Flask入门(三)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。