我将使用基于类的视图并将调度方法包装为需要登录,有点像这样:
class ProfileView(TemplateView, ProcessFormView):
template_name = "profile.html"
def post(self, request, *args, **kwargs):
context = self.get_context_data()
# Validate the form
form = ProfileForm(request.POST, request.FILES)
if form.is_valid():
profile = get_object_or_404(UserProfile, user=request.user)
if form.cleaned_data['avatar']:
profile.avatar = form.cleaned_data['avatar']
profile.bio = form.cleaned_data['bio']
profile.save()
context['form'] = ProfileForm(initial={'bio':UserProfile.objects.get(user=request.user).bio})
# Add message
messages.add_message(request, messages.SUCCESS, _(u"Profile saved."))
else:
# Add message
messages.add_message(request, messages.ERROR, _(u"Something went wrong..."))
context['form'] = form
return self.render_to_response(context)
def get(self, request, *args, **kwargs):
context = self.get_context_data()
context['form'] = ProfileForm(initial={'bio':UserProfile.objects.get(user=request.user).bio})
return self.render_to_response(context)
def get_context_data(self, **kwargs):
context = super(ProfileView, self).get_context_data(**kwargs)
context['title'] = 'profile'
return context
@method_decorator(login_required(login_url='/'))
def dispatch(self, *args, **kwargs):
return super(ProfileView, self).dispatch(*args, **kwargs)