Что означает _external = True в flask_mail? - PullRequest
0 голосов
/ 19 апреля 2020
import os
import secrets
from PIL import Image
from flask import url_for, current_app
from flask_mail import Message
from app import mail


def save_picture(form_picture):
    random_hex = secrets.token_hex(8)
    f_name, f_ext = os.path.splitext(form_picture.filename)
    picture_fn = random_hex + f_ext
    picture_path = os.path.join(current_app.root_path, 'static/profile_pics', picture_fn)
    output_size = (125, 125)
    i = Image.open(form_picture)
    i.thumbnail(output_size)
    i.save(picture_path)
    return picture_fn

def send_reset_email(user):
    token = user.get_reset_token()
    msg = Message('Password Reset Request', sender='noreplies@diemo.hr', recipients=[user.email])
    msg.body = f''' To reset your password, visit the following link:
{url_for('users.reset_token', token=token, **_external=True**)}
If you did not make this request then simply ignore this email and no changes will be made
    '''
    mail.send(msg)

Я создаю приложение Flask и изучаю, как отправлять сообщения о сбросе с помощью модуля flask_mail, поэтому мне интересно, что означает _external = True (функция send_reset_email), когда я помещаю ссылку сброса в тело сообщения. Я искал в Google, но ничего не нашел. Заранее спасибо.

1 Ответ

1 голос
/ 19 апреля 2020

_external=True говорит Flask, что он должен генерировать абсолютный URL, а не относительный URL. Например, https://example.com/my-page - это абсолютный URL, а /my-page - это относительный URL. Поскольку вы отправляете электронное письмо, относительный URL-адрес страницы вашего сайта не будет работать.

Документацию по url_for можно посмотреть здесь: https://flask.palletsprojects.com/en/1.1.x/api/#flask .url_for

_external - если установлено значение True, генерируется абсолютный URL-адрес. Адрес сервера можно изменить с помощью переменной конфигурации SERVER_NAME, которая возвращается к заголовку хоста, а затем к IP-адресу и порту запроса.

...