python – 如何在Django中改进这个“注册”视图?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何在Django中改进这个“注册”视图?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3133字,纯文字阅读大概需要5分钟。
内容图文
![python – 如何在Django中改进这个“注册”视图?](/upload/InfoBanner/zyjiaocheng/741/c2dfaac60b754d7fbe2f2382a7684baa.jpg)
我有一个基于Django的网站,允许用户注册(但需要管理员批准该帐户才能查看该网站的某些部分).我是基于django.contrib.auth.我要求用户使用某个域名的电子邮件地址注册,因此我覆盖了UserCreationForm的save()和clean_email()方法.
我的注册页面使用以下视图.我很想知道如何改进这种视图代码改进或流程改进(或其他任何东西,真的).
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
message = None
form.save()
username = form.cleaned_data['username']
password = form.cleaned_data['password1']
user = authenticate(username=username, password=password)
first_name = form.cleaned_data['first_name']
last_name = form.cleaned_data['last_name']
email = user.email
# If valid new user account
if (user is not None) and (user.is_active):
login(request, user)
message = "<strong>Congratulations!</strong> You have been registered."
# Send emails
try:
# Admin email
pk = None
try: pk = User.objects.filter(username=username)[0].pk
except: pass
admin_email_template = loader.get_template('accounts/email_notify_admin_of_registration.txt')
admin_email_context = Context({
'first_name': first_name,
'last_name': last_name,
'username': username,
'email': email,
'pk': pk,
})
admin_email_body = admin_email_template.render(admin_email_context)
mail_admins("New User Registration", admin_email_body)
# User email
user_email_template = loader.get_template('accounts/email_registration_success.txt')
user_email_context = Context({
'first_name': form.cleaned_data['first_name'],
'username': username,
'password': password,
})
user_email_body = user_email_template.render(user_email_context)
user.email_user("Successfully Registered at example.com", user_email_body)
except:
message = "There was an error sending you the confirmation email. You should still be able to login normally."
else:
message = "There was an error automatically logging you in. Try <a href=\"/login/\">logging in</a> manually."
# Display success page
return render_to_response('accounts/register_success.html', {
'username': username,
'message': message,
},
context_instance=RequestContext(request)
)
else: # If not POST
form = UserCreationForm()
return render_to_response('accounts/register.html', {
'form': form,
},
context_instance=RequestContext(request)
)
解决方法:
你甚至不需要这个代码,但我认为风格:
pk = None
try: pk = User.objects.filter(username=username)[0].pk
except: pass
更自然地写得像:
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
user = None
然后在管理员通知模板中使用{{user.id}}而不是{{pk}}.
但是,就像我说的那样,你根本不需要那些代码,因为你已经有了一个用户对象来验证authenticate().
通常在Python中,将try / except块中的异常处理程序设置为空是不好的做法.换句话说,在这种情况下,始终捕获特定的异常,例如User.DoesNotExist.
在try / except块的try部分中包含许多行也是不好的做法.以这种方式编码是更好的形式:
try:
... a line of code that can generate exceptions to be handled ...
except SomeException:
... handle this particular exception ...
else:
... the rest of the code to execute if there were no exceptions ...
最终的次要建议是不要直接在您的视图中发送电子邮件,因为如果您的网站开始看到繁重的注册请求,这将无法扩展.最好在django-mailer应用程序中添加将工作卸载到由另一个进程处理的队列中.
内容总结
以上是互联网集市为您收集整理的python – 如何在Django中改进这个“注册”视图?全部内容,希望文章能够帮你解决python – 如何在Django中改进这个“注册”视图?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。