2017-07-18 23 views
1

おそらく私は検索エリアで正しい質問をしていないが、これに対する答えを見つけることができない。私はかなり多くの人々がこのユースケースを持っていると確信していますが、Django + Pythonの初心者として、私はそれを尋ねる必要があります。電子メールで承認をリクエストして処理するPython + Django

私はフォームをいっぱいにし、データはデータベースに格納されています。基本的にこのフォームはデータベースへのアクセスを要求し、フォームが提出されたら私のプログラムがユーザーのマネージャーとDBAにEメールを送信して承認または拒否するようにします。非常に簡単ですね。

私の考えでは、この電子メールでは、2つのURLを送信します.1つは承認用で、もう1つは要求を拒否することです。 URLがクリックされると、私はmanager_approvalフィールドに更新を含む応答をサーバーに送信します。

誰でもこのソリューションを実装しているのですか、または私を助けてくれる何かを指摘できますか?

私はDjango + Pythonを使用してすべてを行っています。基本的には

よろしく、 マルコスFreccia

答えて

0

電子メールの検証に使用されるこの技術。これはあなたが調べなければならないところです。

という名前のリクエストがあります。このリクエストには、アクセスを要求したユーザーを識別する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と等しいかどうかを確認します。その場合は、要求ステータスを許可に変更します。

関連する問題