我想创建一个应用程序,如果有人愿意为我的公司申请工作,我会在我的应用程序中创建一个条目,然后我会向他们发送一个唯一的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'),
答案 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')
然后在视图中使用它并按照您的意愿处理。