在我看来,login_user我使用ldap服务器进行身份验证。它工作正常。在第一次尝试登录我创建和Uzytkownik类的对象时,它也可以工作(仅在首次登录时,而不是每次1)。现在,当我添加一些代码以将用户添加到指定组时,它仅在首次登录后才起作用。它的行为就像django在第二次尝试登录后从该组中删除用户。
login_user视图中的一些代码:
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
prof=user.get_profile()
prof.stanowisko=user.stanowisko
prof.tytul_Naukowy=user.tytul
prof.save()
try:
uzytkownik=Uzytkownik.objects.get(username=user)
except Exception as e:
g = Group.objects.get(name= settings.DEFAULT_GROUP_NAME) #this 3 lines don't work as I expect
g.user_set.add(user)
g.save()
uzytkownik=Uzytkownik(username=user, tytul_Naukowy=user.tytul, stanowisko=user.stanowisko, imie=user.first_name, nazwisko=user.last_name)
uzytkownik.save()
login(request, user)
return HttpResponseRedirect("/")
Settings.py:
DEFAULT_GROUP_NAME = 'common'
我尝试了第二种方法将组添加到用户而没有任何效果(仅在首次登录后才有效):
g=Groups.objects.get(name='common')
u=User.objects.get(username=user)
u.groups.add(g)
当我登录并立即将登录用户添加到该组并刷新页面时,我发现我在该组中,但在注销和登录后我不在任何组中。我在用户个人资料中做了一些更改,这可能是一个原因吗?
Settings.py:
AUTH_PROFILE_MODULE = 'user.UserProfile'
和我的模块:
class UserProfile(models.Model):
class Meta:
verbose_name_plural = 'Profile'
user = models.OneToOneField(User, unique=True)
stanowisko=models.CharField(max_length=50)
tytul_Naukowy=models.CharField(max_length=30)
def __unicode__(self):
return self.user.username
def create_profile(sender, instance, created, **kwargs):
if created:
profile, created = UserProfile.\
objects.get_or_create(user=instance)
post_save.connect(create_profile, sender=User)