Зарегистрируйтесь, затем войдите в систему с помощью Django - PullRequest
0 голосов
/ 28 октября 2011

У меня есть простая форма регистрации (в signup.html)

<form action="adduser" method="post">
{% csrf_token %}
  Email Address: <input type="email" name="email" required autocomplete="on" placeholder="fr@star.com"/><br/>
  Username: <input type="text" name="username" maxlength=25 required placeholder="JoyfulSophia"/><br/>
  Password: <input type="password" name="password" maxlength=30 required placeholder="**********" /><br/>
  <br/>
  <input type="submit" value="Send" /> <input type="reset">
</form>

Это перенаправляет на представление addUser:

def adduser(request):
    u = User.objects.create_user(request.POST['username'], request.POST['email'], password=request.POST['password'])
    u.save()
    a = Accounts(user=u)
    p = Passwords(user=u)
    a.save()
    p.save()
    return HttpResponseRedirect(reverse('OmniCloud_App.views.profile', args=(u.id,)))

Вот профиль:

@login_required    
def profile(request, User_id):
    u = get_object_or_404(User, pk=User_id)
    a = get_object_or_404(Accounts, pk=User_id)
    return render_to_response('profile.html', context_instance=RequestContext(request))

Так что они не будут авторизованы, но это нормально, потому что мы можем отправить вас в / account / login? Next = / 7 /, поскольку они пользователь 7 (Проблемы впереди!)

def login(request):
    username = request.POST['username']
    password = request.POST['password']
    user = auth.authenticate(username=username, password=password)
    if user is not None and user.is_active:
        auth.login(request, user)
        return HttpResponseRedirect("/account/profile/")
    else:
        return HttpResponseRedirect("/account/invalid/")

Запрос не содержит ничего, что называется username, но то, что было отправлено в форму addUser, так как я могу перестрелять этого брата для входа в систему?Я мог бы это проанализировать URL-адрес (который содержит следующий = USER_ID), но это не будет работать для тех, кто просто вводит base_url / login, и user_id не будет частью URL-адреса навсегда.Так что же делать брату?

Ответы [ 2 ]

3 голосов
/ 28 октября 2011

Почтовые данные существуют только для одного запроса. Если вы хотите использовать его позже, вам следует сохранить его в другом месте.

Вы можете войти в систему сразу после регистрации, в представлении adduser, он только что ввел свое имя пользователя и пароль, ему больше не нужно это делать.

А просмотр логина немного отключен. Это просто "POST" часть представления. Вам нужно проверить и посмотреть, является ли это запросом GET и является ли он возвращаемым шаблоном с формой, содержащей поля username и password и с целевым URL, который указывает на то же представление. Примерно так:

def login(request):
    if request.method == 'GET':
        return render_to_response('login.html', 
                                  { 'form': LoginForm() },
                                  context_instance=RequestContext(request))
    elif request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = auth.authenticate(username=username, password=password)
            if user is not None and user.is_active:
                auth.login(request, user)
                return HttpResponseRedirect("/account/profile")
            else:
                return HttpResponseRedirect("/account/invalid/")

Где login.html примерно так:

{% extends "base_site.html" %}

{% block content %}
    <form method="post" target="{% url login_view %}">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Login" />
    </form>
{% endblock content %}

Кроме того, вы можете вернуть пользователя в ту же форму входа в систему, если имя пользователя и пароль не совпадают, и добавить какое-либо сообщение!

Это только из головы, не пробовал, но должно работать!

0 голосов
/ 28 октября 2011

Существует расширяемое приложение регистрации пользователей для Django, которое называется django-registration , которое предлагает вам множество функций для создания и регистрации пользователей.Настройка очень проста, вы можете найти очень хороший документ здесь

...