Какой самый простой способ сделать страницу регистрации DJANGO? - PullRequest
0 голосов
/ 01 июня 2018

Я относительно новичок в Django, но на прошлой неделе провел бесчисленные часы, изучая, как создавать веб-приложения.Я отскочил от многочисленных учебных пособий, обещающих зарегистрировать пользователя, но все они привели к тому, что мои страницы перестали работать и стали совершенно пустыми и белыми.

Теперь я начинаю все заново, но на этот раз яСделано приложение ПОЛНОСТЬЮ, посвященное входу / выходу пользователя из системы / регистрации.Я наконец-то получил свой логин для работы, но это не приносит мне никакой пользы, так как у меня нет учетных записей пользователей.

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

Заранее спасибо.

Если это помогает, мой код выглядит так: (также стоит упомянуть, что я использую Cloud9 IDE)

views.py

from django.contrib.auth import (
      authenticate,
      get_user_model,
      login,
      logout,
 )
from django.shortcuts import render
from django.http import HttpResponse,HttpResponseRedirect
from .forms import UserLoginForm

# Create your views here.
def login_view(request):
    title = "Login"
    form = UserLoginForm(request.POST or None)
    if form.is_valid():
        username = form.cleaned_data.get("username")
        password = form.cleaned_data.get('password')
        user = authenticate(request, username=username, password=password)      
        if user is not None:
          login(request, user)
          # or any other success page
        #   return HttpResponse("Logged in")
        return HttpResponseRedirect('accounts/home')
    return render(request, "accounts/form.html", {"form":form, "title": title})

forms.py

from django import forms
from django.contrib.auth import (
    authenticate,
    get_user_model,
    login,
    logout,

    )

User = get_user_model()

class UserLoginForm(forms.Form):
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput) 

    class Meta: 
        model = User 
        fields = ('username', 'email', 'password')

    def clean(self,*args,**kwargs):
        username = self.cleaned_data.get("username")
        password = self.cleaned_data.get("password")
        user = authenticate(username=username,password=password)
        if not user:
            raise forms.ValidationError("This user does not exist")
        if not user.check_password(password):
            raise forms.ValidationError("Incorrect Password")
        if not user.is_active:
            raise forms.ValidationError("This user is no longer active.")
        return super(UserLoginForm, self).clean(*args,**kwargs)

form.html (в настоящее время используется для входа в систему, открыт для использования того же формата для регистрации)

{% extends 'accounts/base.html' %}
{% block main_content %}
    <div class="container">
        <div class='col-sm-6 col-sm-offset-3'>
        <h1>{{ title }}</h1>
        <form method='POST' action='' enctype='multipart/form-data'>{% csrf_token %}
            {{ form }}
            <input type='submit' class='btn btn-primary btn-block' value='{{ title }}' />
        </form>
    </div>
    </div>
{% endblock %}

(примечание, я знаю, что это не так)Это часть того, о чем я в первую очередь спрашиваю, но моя страница входа не похожа на ту, которую я хочу, как на этой странице входа в систему начальной загрузки прямо здесь https://getbootstrap.com/docs/4.0/examples/sign-in/. Это как это выглядит правильносейчас

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

{% load staticfiles %}

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>Accounts</title>

    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <link rel="stylesheet" type="text/css" href="{% static 'accounts/signin.css' %}" />
</head>

<body>


    <div class="jumbotron">
        <div class="container">

            {% block main_content %} 
            {% endblock %} 
        </div>
    </div>

</body>

</html>

Как выглядит моя платформа

Искренне ценю любого, кто читал это далеко.

1 Ответ

0 голосов
/ 01 июня 2018

Прямо сейчас у вас есть представление login_view, которое работает с вашей формой, UserLoginForm, чтобы принять некоторые данные POST и попытаться войти в систему пользователя. Вы можете повторно использовать эту логику, чтобы сделатьпредставление, которое создает пользователя.Фактически, поскольку Django определяет для вас UserCreationForm, вам даже не нужно создавать его самостоятельно (при условии, что вы используете модель аутентификации по умолчанию): https://docs.djangoproject.com/en/2.0/topics/auth/default/#django.contrib.auth.forms.UserCreationForm

Так как это для школыпроект Я не буду писать код для вас, но продумайте это до конца и у вас будет хорошее начало:

  1. Вам нужно представление, которое подает некоторые данные POST в форму - вы знаете, каксделайте это.
  2. Ваше мнение должно проверить эту форму - вы тоже знаете, как это сделать.Поскольку вы используете встроенную форму Django, у вас также будут встроенные валидаторы.
  3. Вам потребуется сохранить данные из этой формы как новый пользователь.Эта часть будет новой.Если вы используете встроенный UserCreationForm, то есть ModelForm, вы можете использовать form.save().Вы должны прочитать о ModelForms, чтобы понять, почему это так: https://docs.djangoproject.com/en/2.0/topics/forms/modelforms/#django.forms.ModelForm С другой стороны, если вы решите написать свою собственную форму, вам потребуется получить доступ к данным этой формы и использовать ее для созданияновый пользователь вручную.Вы знаете, как получить доступ к данным формы - вы делаете это в представлении входа в систему - поэтому все, что вам нужно сделать, - это использовать эти данные для создания пользователя вместо входа в систему. Не используйте User.objects.create для этого -используйте User.objects.create_user.Прочтите это, чтобы понять, почему: https://docs.djangoproject.com/en/2.0/ref/contrib/auth/#django.contrib.auth.models.UserManager.create_user
  4. Теперь у вас есть новый пользователь, но вашему представлению все еще нужно вернуть какой-то ответ.Что должно произойти дальше?Сделать страницу приветствия, перенаправить на новое место?До вас, но посмотрите на свое представление входа в систему - вы уже знаете, как визуализировать произвольный шаблон с контекстом и как перенаправить в другое представление.Вы можете сделать что угодно!

Надеюсь, это послужит отправной точкой для вас.Прочитав о ModelForms, вы должны иметь представление о том, как реализовать представление edit, как вы описали.Попробуйте, затем вернитесь в SO и опубликуйте конкретные вопросы о проблемах, с которыми вы столкнулись, вместе с кодом, который вы пробовали.Подсказка: instance - ваш друг.

Наконец, ваша страница входа выглядит забавно, потому что вы визуализируете форму с простым тегом шаблона {{form}}.Вы можете заставить его выглядеть немного лучше (мнения различаются) с {{form.as_p}} или {{form.as_table}}.Чтобы сделать это лучше, вам нужно либо визуализировать каждое поле отдельно (чтобы вы могли управлять их стилем), либо заглянуть в django-crispy-forms.

...