【发布时间】:2020-05-06 17:08:06
【问题描述】:
我在基于类的视图中转换以下函数视图: 但问题是下面的登录代码使用了请求对象。那么如何在表单视图中使用这个请求。
我想更改为基于类的视图的功能视图:
def login(request):
if request.method == 'GET':
form = UserLoginForm()
elif request.method == 'POST':
form = UserLoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data.get('name')
password = form.cleaned_data.get('password')
user = User.objects.filter(name=username, password=password).first()
if user is not None:
request.session['user'] = username
return redirect('index')
else:
messages.error(request, 'Username or password no matched')
return render(request, 'products_app/login.html', {'form': form})
上面代码的基于 FormView/class 的视图我更改为给出错误:
class Login(FormView):
template_name = 'products_app/login.html'
form_class = UserLoginForm
success_url = reverse_lazy('index')
def form_valid(self, form):
username = form.cleaned_data.get('name')
password = form.cleaned_data.get('password')
user = User.objects.filter(name=username, password=password).first()
if user is not None:
request.session['user'] = username
else:
messages.error(request, 'Username or password no matched')
super().form_valid(form)
这里的问题是,与上面 def login(request) 的功能视图不同,没有收到请求。所以给出错误:
module 'django.http.request' has no attribute 'session'
【问题讨论】:
-
你启用会话中间件了吗?
-
@WillemVanOnsem 是的,我在 installed_apps 中列出了“django.contrib.sessions”。
标签: django django-models django-rest-framework django-forms django-views