0
我正在用Django框架编写一个twitter克隆。主页有一个表单和一个POST按钮。点击POST后,我想检查用户是否登录。如果没有登录,它将使用户登录窗体。一旦登录完成,邮件将被保存到数据库并更新主页。我不知道如何去做。我的django方法如下Django如何登录后点击按钮?
class MsgListView(ListView):
model = coremodels.message
template_name = "msg.html"
def get_context_data(self, **kwargs):
context = super(MsgListView, self).get_context_data(**kwargs)
context['form'] = MsgForm()
return context
#@method_decorator(login_required(login_url=reverse('MsgListView')))
@method_decorator(login_required)
def post(self, request, *args, **kwargs):
print "Inside MsgListView post"
view = MsgFormPost.as_view()
return view(request, *args, **kwargs)
class MsgFormPost(FormView, SingleObjectMixin):
form_class = MsgForm
model = coremodels.message;
def post(self, request, *args, **kwargs):
#if not request.user.is_authenticated():
# return HttpResponseForbidden()
self.object = None
return super(MsgFormPost, self).post(request, *args, **kwargs)
def get_success_url(self):
return reverse('MsgListView')
class MsgForm(forms.ModelForm):
date_n_time = forms.DateTimeField(initial=date.today(), widget=HiddenInput())
parent = forms.ModelChoiceField(queryset=coremodels.message.objects.none(),required=False,widget=forms.HiddenInput())
text = forms.CharField(widget = forms.Textarea(attrs={'cols':1,'rows':3, 'id': 'msginput','oninput':"this.editor.update()"}))
def is_valid(self):
self.fields["parent"] = forms.ModelChoiceField(queryset=coremodels.message.objects.all(),required=False,widget=forms.HiddenInput())
return super(MsgForm, self).is_valid()
class Meta:
model = coremodels.message
fields = "__all__"
问题是,登录装饰器完全忽略POST参数。 我试过使用Django会话,但它变得复杂,因此,我应该在获取请求期间保存表单。我该如何解决这个问题?
的形式本身就是如下
<form autocomplete="off" class=" message" name="post-box" action="" enctype="multipart/form-data" method="POST">
<input type="hidden" name="csrfmiddlewaretoken" value="Ij1kmJuP84KdNIedcg3JnryvzaEFXk2q">
<div class="control-group">
<div class="controls">
<div id="post-box-body">
<textarea name="text" id="tagsinput_id" oninput="this.editor.update()" class="input-block-level" rows="2" placeholder="Write message" style="overflow: hidden; word-wrap: break-word; height: 130px;"></textarea>
</div>
<div id="post-box-footer">
<div class="pull-right">
<button data-pre-flight-text="Post" data-in-flight-text="Posting..." type="submit" class="btn btn-primary limited-access-aware">Post</button>
</div>
</div>
</div>
</div>
<div class="form-group warning col-md-4 data-picker col-xs-4 col-md-4 col-sm-4" style="/* width: 160px; */">
<!--<label for="exampleInputFile">Date n time</label>-->
<input class="form-control" id="id_date_n_time" name="date_n_time" type="hidden" value="2016-03-06">
</div>
<div class="form-group warning col-md-4">
<!--<label for="exampleInputFile">Parent</label>-->
<input class="form-control" id="id_parent" name="parent" type="hidden">
</div>
什么是你的主页的视图方法,它的形式是什么? –
主页MsgListView的基于类的视图。我已经复制了上面的代码。 – user763410
为什么使用ListView来显示表单?你需要使用一个简单的视图(如FormView)来显示你的登录表单;然后为您的主页提供单独的视图,其中包含推文。通过将它们结合在一起来混淆你自己。请参阅[文档](https://docs.djangoproject.com/en/1.9/topics/auth/default/#how-to-log-a-user-in)以获取有关如何在 –