У меня такая же проблема, я имею в виду, что люди всегда имеют пароль происхождения ... пример; используя функцию для выполнения шифрования и возврата исходного пароля к новой переменной, конечно, люди просто печатают эту переменную, чтобы знать исходный пароль ...
Но если вы справитесь с ним, например; form (требуется ввести пароль перед отправкой сообщения электронной почты), я думаю, это возможно ... это то, что было в моей голове.
Django имеет функцию для обработки пароль, то make_password
>>> from django.contrib.auth import hashers
>>> pwd = hashers.make_password('your-original-password')
>>> pwd
'pbkdf2_sha256$30000$74DtkZMARQHr$rC3CEdtDnDjRYE5U2ZRiWxuT+HQf3Aq1KTStpypZDV8='
>>>
Положите в свой settings.py
этот закодированный пароль;
EMAIL_HOST_PASSWORD = 'pbkdf2_sha256$30000$74DtkZMARQHr$rC3CEdtDnDjRYE5U2ZRiWxuT+HQf3Aq1KTStpypZDV8='
И потом, каждый раз, когда вам нужно отправить сообщение по электронной почте, вам требуется вводить первоначальный пароль, который вы имеете, это условие, чтобы проверить первоначальный пароль hashers.check_password(password, encoded)
Этот сценарий ниже пример как это сделать;
1. forms.py
from django import forms
class QuoteForm(forms.Form):
subject = forms.CharField(widget=forms.TextInput())
message = forms.CharField(widget=forms.Textarea())
password = forms.CharField(widget=forms.PasswordInput())
....
2. views.py
from django.shortcuts import render, redirect
from django.contrib.auth import hashers
from django.conf import settings
from yourapp.forms import QuoteForm
ENCODED_PASSWORD = settings.EMAIL_HOST_PASSWORD
def quote(request):
template_name = 'yourtemplate.html'
if request.method == 'POST':
form = QuoteForm(request.POST)
if form.is_valid():
subject = form.cleaned_data['subject']
message = form.cleaned_data['message']
# in this section is important,
# so the password only known by it owner.
password = form.cleaned_data['password']
is_matched = hashers.check_password(password, ENCODED_PASSWORD)
if is_matched:
# change default encoded password from the settings,
# with original password from field of `password`.
settings.EMAIL_HOST_PASSWORD = password
send_mail(
subject, message, settings.EMAIL_HOST_USER,
['[email protected], [email protected], [email protected]]
)
return redirect('/success/page/')
return redirect('/password-failed/page/')
else:
context = {'form': form, 'errors': form.errors}
return render(request, template_name, context)
else:
form = QuoteForm()
return render(request, template_name, {'form':form})
Я не уверен, что это решение лучше, потому что, конечно, трудно для пользователей.
Рассмотрите возможность использования переменных среды для хранения информации в секрете. Это руководство поможет вам: [Работа с переменными среды в Python] (https://godjango.com/blog/working-with-environment-variables-in-python/) –