1
我想将function based view
转换为的Django
。该视图的功能是显示主页以及登录/注销表单/按钮。 基于Django的视图登录
基本上,如果用户登录,注销按钮将显示在Account
下面,如果用户已经注销,将会显示一个login
表单。所以,它适合我的基于功能的看法:
views.py
def _get_login_form(request):
form = UserLoginForm(request.POST or None)
if request.POST and form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
user = authenticate(username=username, password=password)
if user:
login(request, user)
return form
@csrf_protect
def index(request):
if request.user.is_authenticated():
form = forms.Form(request.POST or None)
if 'logout-button' in request.POST and form.is_valid():
logout(request)
form = _get_login_form(request)
else:
form = _get_login_form(request)
info = {
'company_name' : 'Purpose VC',
'form': form,
'lorem': '''Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'''
}
return render(request, 'main/index.html', info)
,但我有与Class based View
麻烦。这是我到目前为止有:
class IndexView(TemplateView):
template_name = 'main/index.html'
def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
context['company_name'] = 'Purpose VC'
context['lorem'] = '''Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'''
context['form'] = kwargs['form']
return context
def get(self, request):
form = UserLoginForm(request.POST or None)
return self.get_context_data(self, form)
def post(self, request):
if request.user.is_authenticated():
if 'logout-button' in request.POST and form.is_valid():
logout(request)
form = self._get_login_form(request)
else:
form = self._get_login_form(request)
return self.get_context_data(self, form)
def _get_login_form(self, request):
form = UserLoginForm(request.POST or None)
if request.POST and form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
user = authenticate(username=username, password=password)
if user:
login(request, user)
return form
我有传递,如果用户进行身份验证或不基于相应表格的麻烦。我得到的具体错误是context['form'] = kwargs['form'] KeyError: 'form'
任何想法?
好吧,似乎工作。现在我想我需要实现一个get函数,因为表单没有显示。 – anderish
你能告诉我什么是form = forms.Form(request.POST或None)使用这一行以及它如何工作? –
对不起,这是一个不必要的代码行。我编辑了上面的代码。 – anderish