電子メールの検証に使用されるこの技術。これはあなたが調べなければならないところです。
という名前のリクエストがあります。このリクエストには、アクセスを要求したユーザーを識別するusernameなどのフィールドと、データベース名などがあります。しかし、リクエストが拒否されたかどうかを判断するために使用される2つの「パスワードのような」フィールドもあります。
class Request(models.Model):
user = models.ForeignKey ...
databasename =
date =
...
access_granted = models.BooleanField(default=False)
deny_token = models.CharField()
allow_token = models.CharField()
ポイントはビューに要求を保存するには、これらのトークンを生成することです:
if request.method == POST:
form = RequestForm(request.POST)
if form.is_valid():
data['user'] = form.cleaned_data['user'])
data['databasename'] = form.cleaned_data['databasename'])
...
data['access_token'] = GENERATE_USING_HASH_FUNCTION()
data['deny_token'] = GENERATE_USING_HASH_FUNCTION()
form.save(data)
次に、あなたがそうのようなHTML形式の電子メールを送信するモジュールEmailMultiAlternatives
を使用することができます。
subject, from_email, to = 'Request', '[email protected]', form.cleaned_data['manager_email']
html_content = render_to_string(HTML_TEMPLATE, CONTEXT) # Just as any regular templates
text_content = strip_tags(html_content)
msg = EmailMultiAlternatives(subject, text_content, from_email, [to], reply_to=["[email protected]"])
msg.attach_alternative(html_content, "text/html")
msg.send()
そのテンプレートの中に逆URLを作成します:
{% url 'app:grant_access' allow_token=token %} # "token" you get from context
{% url 'app:deny_access' deny_token=token %} # will become example.com/deny_access/7ea3c95, where 7ea3c95 is token
は、そのようなあなたのアプリのurls.pyに行を追加します。
url(r'^allow_access/(?P<allow_token>[0-9]+)$', CheckAcessView.as_view(), name="app:grant_access"),
url(r'^deny_access/(?P<deny_token>[0-9]+)$', CheckAcessView.as_view(), name="app:deny_access"),]
その後CheckAcessView
ビューを作成します。あなたのデータベースに格納されているリクエストにアクセスし、たとえば "allow_token"というURLのパラメータがallow_tokenと等しいかどうかを確認します。その場合は、要求ステータスを許可に変更します。