Джанго 1,10 Python 3.5.3Джанго ОЦК Войти и перенаправить пользователя на страницу профиля: передавая имя пользователя LOGIN_REDIRECT_URL
Используя ОЦК, я могу войти пользователя на сайт. Однако я не могу заставить пользователя перенаправлять свой профиль после входа в систему. Я хочу, чтобы они зашли на эту страницу после входа в систему: https://example.com/profiles/user. Вместо этого, я получаю эту ошибку:
NoReverseMatch at /accounts/login/
Reverse for 'profile' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['profile/(?P<slug>[\\w-]+)/$']
Как я могу передать имя пользователя в URL?
models.py
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField(max_length=500, blank=True)
location = models.CharField(max_length=30, blank=True)
birth_date = models.DateField(null=True, blank=True)
username = models.CharField(max_length=30,
unique = True,
default='')
email = models.EmailField(default='',
unique = True,
max_length=100)
profile_image = models.ForeignKey(Image, null=True)
slug = models.SlugField(default='')
is_active = models.BooleanField(default=True)
is_authenticated = models.BooleanField(default=True)
is_anonymous = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['name']
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
def next_birthday(born):
today = date.today()
return today.year - born.year - ((today.month, today.day) < (born.month, born.day))
def get_absolute_url(self):
return reverse('profiles:profile', kwargs={'slug': self.slug})
def __str__(self):
return self.username
views.py
class LoginView(FormView):
template_name = 'registration/login.html'
"""
Provides the ability to login as a user with a username and password
"""
success_url = 'profile/<slug>'
form_class = AuthenticationForm
redirect_field_name = REDIRECT_FIELD_NAME
@method_decorator(sensitive_post_parameters('password'))
@method_decorator(csrf_protect)
@method_decorator(never_cache)
def dispatch(self, request, *args, **kwargs):
# Sets a test cookie to make sure the user has cookies enabled
request.session.set_test_cookie()
return super(LoginView, self).dispatch(request, *args, **kwargs)
def form_valid(self, form):
auth_login(self.request, form.get_user())
# If the test cookie worked, go ahead and
# delete it since its no longer needed
if self.request.session.test_cookie_worked():
self.request.session.delete_test_cookie()
return super(LoginView, self).form_valid(form)
def get_success_url(self):
redirect_to = self.request.GET.get(self.redirect_field_name)
if not is_safe_url(url=redirect_to, host=self.request.get_host()):
redirect_to = self.success_url
return redirect_to
urls.py
urlpatterns = [
url(r'^(?P<slug>[\w-]+)/$',
ProfileView.as_view(),
name = 'profile'),
settings.py
LOGIN_REDIRECT_URL = 'profiles:profile'
Заранее спасибо.
Проблема заключается в том, что у вас не может быть динамический параметр, например '' в 'LOGIN_REDIRECT_URL'. Вы должны использовать URL-адрес без имени пользователя, а затем перенаправить на URL-адрес с именем пользователя. См. Мой ответ на [дублированный вопрос] (http://stackoverflow.com/questions/36092760/django-login-and-redirect-to-user-profile-page). –
Alasdair
вот почему я получаю ошибку 404 –
Если у вас есть 'LOGIN_REDIRECT_URL = '/ accounts/home_page/ /'', то Django попытается перейти к этому точному URL-адресу. Он не будет заменять имя пользователя, как вы могли ожидать, например. '/ Счета/home_page/Emmanuel /'. Поскольку '[\ w -] +' не принимает '<' or '>', вы получите 404. –
Alasdair