2017-07-18 29 views
1

也許我並沒有在搜索區域提出正確的問題,但是我找不到這個問題的答案。我很確定很多人都有這個用例,但作爲Django + Python的初學者,我需要問一下。通過電子郵件請求審批並對其進行處理Python + Django

我有用戶填寫表單和數據存儲在數據庫中。基本上這個表單要求訪問數據庫,並且在表單提交後,我希望我的程序發送一封電子郵件給用戶的管理員和DBA以批准或拒絕它。非常簡單,對吧?

我的想法是,在這封電子郵件中,我發送了兩個URL,一個用於批准,另一個用於拒絕請求。當點擊URL時,我會向manager_approval字段中的更新發送服務器響應。

有沒有人實施過這個解決方案,或者可以指點我能幫助我的東西?

我正在做所有使用Django + Python。

問候, 馬科斯Freccia

回答

0

基本上這種技術在電子郵件驗證使用。這是你應該看的地方。

比方說,你有模型,名爲請求,它有像用戶名字段來標識請求訪問的人,數據庫名稱,以及一切。但它也會有兩個「類似密碼」的字段,用於確定請求是否被拒絕。

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) 

然後你可以使用模塊EmailMultiAlternatives發送HTML電子郵件,像這樣:

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 '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視圖。在哪裏訪問存儲在數據庫中的請求,並檢查例如url「allow_token」的參數是否等於存儲的allow_token。如果是,請將請求狀態更改爲允許。

相關問題