Python创建一个唯一的哈希/加密网址

时间:2018-02-21 10:11:29

标签: python django hash sha1

我想创建一个应用程序,如果有人愿意为我的公司申请工作,我会在我的应用程序中创建一个条目,然后我会向他们发送一个唯一的URL,它会导致一个表单页面,我想要要进行哈希处理的URL,但我不太确定如何执行此操作。以下是我的代码:

view.py:

def applicant_email_view(request):
    form = ApplicantEmailForm(request.POST or None)
    if form.is_valid():
        inst = form.save(commit=False)
        subject = 'Applicant Form'
        text_content = 'Hola'
        html_content = """
                    <h3 style="color: #0b9ac4><a>http://127.0.0.1:8080/hiring/application_form/</a></h3>
                    """
        to = [inst.applicant_email]
        send_email(subject, text_content, html_content, to)

        inst.save()
    return render(request, 'hiring/applicant_email.html', {'form': form})

def application_form_view(request):
    form = JobApplicationForm(request.POST or None, request.FILES or None)
    if form.is_valid():
        inst = form.save(commit=False)
        inst.save()
    context = {'form': form}
    return render(request, 'hiring/application_form.html', context=context)


def send_email(subject, text_content, html_content, to):
    from_email = 'test@testing.studio'
    footer = """<h5>Do not reply to this email. This is automated email notification from LemonCORE.</h5>
                </br>
                """
    email_body = html_content + footer
    msg = EmailMultiAlternatives(subject, text_content, from_email, to)
    msg.attach_alternative(email_body, "text/html")
    msg.send()

url.py:

url(r'^hiring/application_email/$', applicant_email_view, name='application_email_view'),
    url(r'^hiring/application_form/$', application_form_view, name='application_form_view'),

2 个答案:

答案 0 :(得分:1)

如果我在你的鞋子里(取决于你在这里写的内容),我会考虑一些不同的策略。 我不是只对网址进行哈希处理,而是实现某种Map(在服务器端),它会将accountId / guestId / hashed URL(或任何其他唯一标识符)的条目存储到匹配URL创建的时间 - 然后我将配置一个基本吞吐量,它将定义每个条目的可用时间(您可以根据需要扩展此机制,这非常简单)。

**对于散列URL,您可以使用SHA256或其他任何实现,然后使用base62对其进行编码(如果我没有错误,base64包含“/”和“?”。)

让我知道您的想法:)

答案 1 :(得分:1)

我假设您的主要想法是使用唯一字符串作为标识符,并且您尝试使用哈希作为唯一字符串。

如果是这样,我建议使用uuid模块。

执行类似

的操作
import uuid
unique_key = str(uuid.uuid4()).replace('-')
url = 'http://127.0.0.1:8080/hiring/application_form/{0}/'.format(unique_key)
# Store the unique_key in the DB with the user object,
# and use it in the email..etc.,

在URL中获取地图捕获UUID

url(r'^hiring/application_form/(?P<uuid>[a-f0-9]+)/$', applicant_form_view, name='application_form_view')

然后在视图中使用它并按照您的意愿处理。