Мои Django формы входа / регистрации сохраняют все, кроме суммы - PullRequest
0 голосов
/ 09 июля 2020

Я создаю веб-сайт банка, на котором пользователи могут открывать счета, снимать средства, вносить депозит и просматривать историю транзакций. Работаю над ними две недели. Вход и регистрация работают, и он сохраняет адрес электронной почты, имя пользователя и пароль, но когда я ввожу сумму, запрос работает, и я перенаправляюсь без каких-либо ошибок, но сумма (баланс) не сохраняется. Затем я попытался жестко запрограммировать сумму, а затем изменить ее позже, когда человек получит aws или внесет депозит. Тем не менее, те же результаты, когда я пытаюсь отобразить текущий баланс на панели инструментов, он остается пустым. Я вставил код и использую Django 3.0 +

Views.py

from django.shortcuts import render, redirect
from django.contrib.auth import logout, authenticate, login
from accounts.forms import SignUpForm
from django.contrib.auth.forms import AuthenticationForm, User
from django.contrib.auth.decorators import login_required
from django.contrib import messages

# Welcome, Login, Signup
def welcome(request):
    return render(request, 'accounts/welcome.html')

def signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password1')
            user.amount = 500
            user.save()
            u = authenticate(username=username, password=password)
            return redirect('login-page')
        else:
           messages.error(request, 'Invalid input or missing fields. Please try again!')
           return redirect('signup-page') 
    else:
        form = SignUpForm()
    return render(request, 'accounts/signup.html', {'form': form})

def login_view(request):
    if request.method == 'POST':
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = authenticate(username=username, password=password)
            if user is not None:
                login(request, user)
                return redirect('dashboard')
            else:
                messages.error(request,'Invalid login credentials. Please try agian.')
                return redirect('login-page')
        else:
            messages.error(request,'Invalid login credentials. Please try agian.')
            return redirect('login-page')
    form = AuthenticationForm()
    return render(request, 'accounts/login.html', {'form': form})

# Dashboard, Transfer, Transactions
@login_required(login_url='/login/')
def dashboard(request):
    user = User.objects.all()
    return render(request, 'accounts/dashboard.html', {'user': user})

Forms.py

from django import forms
from django.contrib import messages
from django.contrib.auth.forms import UserCreationForm, User

class SignUpForm(UserCreationForm):
    email = forms.EmailField(max_length=128, help_text='Input valid email')

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

панель инструментов. html

{% extends 'accounts/base.html' %}
{% load static %}

{% block content %}

<div class="row">

    <div class="col-sm-4">
        <div class="card">
            <div class="card-body">
                <h5 class="card-title">Current Balance</h5>
                <p class="card-text">{{ request.user.amount }}</p>
            </div>
        </div>
    </div>

    <div class="col-sm-4">
        <div class="card">
            <div class="card-body">
                <h5 class="card-title">Total Expenses</h5>
                <p class="card-text">Amount goes here.</p>
            </div>
        </div>
    </div>

    <div class="col-sm-4">
        <div class="card">
            <div class="card-body">
                <h5 class="card-title">Total Spent</h5>
                <p class="card-text">Amount goes here.</p>
            </div>
        </div>
    </div>

    <div class="col-sm-4 py-4">
        <div class="card">
            <div class="card-body extended">
                <h5 class="card-title">Credit Card</h5>
                <h4 class="card-subtitle" id="cc">**** **** **** 1234</h4>
                <div id="med-pad">
                    <p class="card-text medium">{{ request.user.username }}</p>
                    <p class="card-text medium">Valid Through: 07/22</p>
                </div>
                <p id="cvv-pad" class="card-text">CVV: 001</p>
            </div>
        </div>
    </div>

    <div class="col-sm-8 py-4">
        <div class="card">
            <div class="card-body extended">
                <h5 class="card-title">Total Spent</h5>
                <p class="card-text">Amount goes here.</p>
            </div>
        </div>
    </div>

</div>

{% endblock %}

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

1 Ответ

0 голосов
/ 09 июля 2020

Итак, если я правильно понимаю, вы хотите установить атрибут «количество» для пользователя.

Если так: модель пользователя по умолчанию (модель пользователя поставляется из коробки с Django), поле суммы не включено. Вам нужно будет расширить модель пользователя и добавить к ней поле «количество».

К сожалению, я не могу проверить следующее, но я считаю, что если вы создадите models.py со следующим:

from django.db import models
from django.contrib.auth.models import User

class BankAccount(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    amount = models.FloatField()

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

...