Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过电子邮件申请批准,并通过Python+;德扬戈_Python_Django_Email - Fatal编程技术网

通过电子邮件申请批准,并通过Python+;德扬戈

通过电子邮件申请批准,并通过Python+;德扬戈,python,django,email,Python,Django,Email,也许我在搜索区问的问题不对,但我找不到答案。我很确定很多人都有这个用例,但是作为Django+Python的初学者,我需要问一下 我有一个用户填写表单,数据存储在数据库中。基本上,此表单要求访问数据库,提交表单后,我希望我的程序向用户经理和DBA发送电子邮件,以批准或拒绝该表单。很简单,对吧 我的想法是,在这封电子邮件中,我发送了两个URL,一个用于批准请求,另一个用于拒绝请求。单击URL后,我会向服务器发送一个响应,并在manager_approval字段中进行更新 是否有人实施了此解决方案,

也许我在搜索区问的问题不对,但我找不到答案。我很确定很多人都有这个用例,但是作为Django+Python的初学者,我需要问一下

我有一个用户填写表单,数据存储在数据库中。基本上,此表单要求访问数据库,提交表单后,我希望我的程序向用户经理和DBA发送电子邮件,以批准或拒绝该表单。很简单,对吧

我的想法是,在这封电子邮件中,我发送了两个URL,一个用于批准请求,另一个用于拒绝请求。单击URL后,我会向服务器发送一个响应,并在manager_approval字段中进行更新

是否有人实施了此解决方案,或者可以为我指出一些可以帮助我的方法

我使用Django+Python做所有事情

问候,,
Marcos Freccia

基本上,这种技术用于电子邮件验证。这是你应该调查的地方

假设您有模型,名为request,它有类似username的字段来标识请求访问的人、数据库名称以及所有内容。但它也将有两个“类似密码”的字段,用于确定请求是否被拒绝

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)
然后,您可以使用模块
EmailMultiAlternations
发送html电子邮件,如下所示:

subject, from_email, to = 'Request', 'admin@example.com', 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=["admin@example.com"])
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
然后向应用程序的url.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"),]
url(r'^allow_access/(?P[0-9]+)$),选中acessview.as_view(),name=“app:grant_access”),
url(r'^deny_access/(?P[0-9]+)$),选中AcessView.as_view(),name=“app:deny_access”),]
然后创建
CheckAcessView
view。访问存储在数据库中的请求,并检查url“allow_token”的参数是否等于存储的allow_token。如果是,请将请求状态更改为“允许”