我使用django的auth模块在我的网站上处理用户登录,注销和注册。
问题在于,当我注册一个新用户时,我重新定向到另一个URL,然后,由于模型已创建但未自动登录,我需要导航到/ login /并登录在手动。
我希望我的网站能够自动执行此操作。我的意思是:
Urls.py看起来像这样:
from django.conf.urls import include, url, patterns
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.auth import views as auth_views
from django.contrib.auth.forms import UserCreationForm
from browse.views import UserCreate
urlpatterns = patterns('',
url(r'',include('browse.urls')),
url(r'^$', 'browse.views.home_page', name='home'),
url(r'^admin/', include(admin.site.urls)),
url(r'^login/$', auth_views.login, {'template_name': 'browse/login.html'}),
url(r'^register/$', UserCreate.as_view(
template_name='browse/register.html',
form_class=UserCreationForm,
success_url='/register/'
)),
url(r'^logout/$', 'browse.views.logout_view', name='logout'),
url(r'^', include('django.contrib.auth.urls')),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
和views.py看起来像这样:
from django.shortcuts import render, redirect
from django.views.generic.edit import CreateView
from browse.models import Pattern
from django.contrib.auth.models import User
from django.contrib.auth import logout, login
class PatternCreate(CreateView):
model = Pattern
fields = ['name','description','license', 'xcheme', 'pictures', 'video']
class UserCreate(CreateView):
model = User
def post(self, request):
return login(request, User.objects.get(username=request.POST['username']))
def home_page(request):
return render(request, 'browse/home.html')
def pattern_detail(request, pk):
pattern = Pattern.objects.get(pk=pk)
return render(request, 'browse/pattern_detail.html', {'pattern': pattern})
def logout_view(request):
logout(request)
return redirect('/')
如您所见,当您进行GET / register /时,将呈现注册表单。当我POST到/ register /时,我想要正常执行视图然后添加:
def post(self, request):
return login(request, User.objects.get(username=request.POST['username']))
但看起来我覆盖了默认视图而不是添加它,因为模型没有保存,因为我收到了这个错误:
例外值:
用户匹配查询不存在。
我该如何解决?
事先非常感谢你。
答案 0 :(得分:0)
好的,这是一个非常愚蠢的问题。幸运的是,我可以搞清楚:
def post(self, request):
super(UserCreate, self).post(request)
login_username = request.POST['username']
login_password = request.POST['password1']
created_user = authenticate(username=login_username, password=login_password)
login(request, created_user)
return redirect('/')
我所要做的就是调用super()并执行父函数。然后,我的代码执行。