Django вставка данных в БД с использованием HTML-шаблона - PullRequest
0 голосов
/ 01 июля 2018

Я новичок в Джанго. Я пытаюсь подключить уже созданный HTML-файл к бэкэнду Django, не перестраивая весь файл. Уже созданные формы и представления в Python, но не знаю, что поместить в HTML-файл.

просмотр класса:

class signup(View):
    template = loader.get_template('signup.html')
    form_class = UserRegistrationForm

    def get(self, request):
        form = self.form_class(None)
        return render(request, 'signup.html', {'form': form})

    def post(self, request):
        form = self.form_class(request.POST)

        if form.is_valid():
            current_user = form.save(commit=False)

            email = form.cleaned_data['email']
            password = form.cleaned_data['password']
            current_user.set_password(password)
            current_user.save()

            userToAuthenticate = authenticate(email=email, password=password)

            if userToAuthenticate is not None:
                if userToAuthenticate.is_active:
                    login(request, userToAuthenticate)
                    return redirect('siteViews:index')

        return render(request, 'signup.html', {'form': form})

код формы:

class UserRegistrationForm(forms.ModelForm):

    password = forms.CharField(widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ['email', 'password']

и HTML-код:

    <div id="registersquare">
        <div id="panel">
            <form class="form-horizontal" role="form" action="" method="post" enctype="multipart/form-data">
                {% csrf_token %}
                <label for="email">Email adress:</label>
                <input type="email" id="username" name="email}">

                <label for="password">Password:</label>
                <input type="password" id="password" name="password">

                <label for="password">Repeat password:</label>
                <input type="password" id="password" name="repeatedpassword">

                <label class="control-label col-sm-2" for="password">{{ field.label_tag }}</label>

                <div id="lower">
                    <input type="checkbox"><label class="check" for="checkbox"><a style="color: #999999;" href="#">I Accept Website Terms And Conditions.</a></label>
                    <input type="submit" value="Sign up">
                </div>
            </form>
        </div>
    </div>

Кто-нибудь может объяснить, как это сделать? веселит

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Вы уже создали форму, которая не является формой Django, поэтому вам не нужно ничего писать в forms.py, так как ее цель - создать форму на основе структуры модели и выполнить проверки в соответствии с поля определены.

Теперь вам нужно получить данные из формы и выполнить проверку и проверку самостоятельно в представлениях. Таким образом, post будет

def post(self, request):
    email = request.POST.get('email')  # get value in name="email" field
    password = request.POST.get('password')
    repeatedpassword = request.POST.get('repeatedpassword')

    if password == repeatedpassword: # manual validation to check if both string are same
        # Other Validations code here and
        # Register or Login etc functions here

    return render(request, 'signup.html', {'form': form})
0 голосов
/ 03 июля 2018

Вам нужно удалить метки и входные данные из вашего html-файла и добавить этот тег после {% csrf_token %}, {{form.as_p}}, это начало. Вы также используете более старую версию Django, я могу сказать, что когда вы определили свою ModelForm, вы написали forms.ModelForm, когда она была изменена на ModelForm, чтобы обновить запись

pip install -U Django

По сути, вы создали две формы, одну только с html, а другую только с Django. Вы не применили свою ModelForm к html-файлу, вместо этого вы просто создали html-форму вместо html-рендеринга Django ModelForm.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...