首页 > 解决方案 > 为什么我的输入字段没有显示在网站上?

问题描述

我使用相同的代码创建了一个登录和注册页面。注册页面显示用户名输入字段和其他字段,但登录页面仅显示按钮。任何人都可以帮助我吗

代码:

登录页面:

<div class="content-section">
            <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Join Today</legend>
                {{ form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">Sign Up</button>
            </div>
        </form>
        <div class="border-top pt-3">
            <small class="text-muted">
                Already Have An Account? <a class="ml-2" href="{% url 'login' %}">Sign In</a>
            </small>
        </div>
    </div>

注册页面:

<div class="site-section">
            <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Log In </legend>
                {{ form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">Login</button>
            </div>
        </form>
        <div class="border-top pt-3">
            <small class="text-muted">
                Need An Account? <a class="ml-2" href="{% url 'register' %}">Sign Up Now</a>
            </small>
        </div>
</div>

注册页面

登录页面

这是项目 Views.py 的视图

from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import UserRegisterForm
from .models import Post
from django.contrib.auth.decorators import login_required

def home(request):
    context = {
        'posts': Post.objects.all()
    }
    return render(request, 'blog/home.html', context)


def about(request):
    return render(request, 'blog/about.html', {'title': 'About'})

def gallery(request):
    return render(request, 'blog/gallery.html', {'title': 'Gallery'})

def foodopedia(request):
    return render(request, 'blog/foodopedia.html', {'title': 'Foodopedia'})


def register(request):
    if request.method == 'POST':
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            messages.success(request, f'Account created for {username}!')
            return redirect('blog-home')
    else:
        form = UserRegisterForm()
    return render(request, 'blog/register.html', {'form': form})

def login(request):
    return render(request, 'blog/login.html', {'title': 'Login'})

@login_required
def profile(request):
    return render(request, 'blog/profile.html', {'title': 'Profile'})

def upload(request):
    context = {}
    if request.method == 'POST':
        uploaded_file = request.FILES['document']
        fs = FileSystemStorage()
        name = fs.save(uploaded_file.name, uploaded_file)
        context['url'] = fs.url(name)
        context['filename'] = name
        pred, probability = process_image(name)

        context['prediction'] = pred
        context['probability'] = probability

    return render(request, 'blog/foodopedia.html', context)

这是项目的 urls.py

from django.contrib import admin
from django.urls import path, include
from blog import views as blog_views

from django.contrib.auth import views as auth_views
from blog import views as blog_views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('register/', blog_views.register, name='register'),
    path('profile/', blog_views.profile, name='profile'),
    path('', include('blog.urls')),
    path('login/', auth_views.LoginView.as_view(template_name='blog/login.html'), name='login'),
    path('logout/', auth_views.LogoutView.as_view(template_name='blog/logout.html'), name='logout'),

]

这是 form.py 文件:

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm


class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()

    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']

标签: djangodjango-crispy-forms

解决方案


您可以尝试使用它,改编自本教程中的示例:

from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from django.contrib.auth.forms import AuthenticationForm

def login(request):
    if request.user.is_authenticated:
        return redirect('/')
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return redirect('/')
        else:
            form = AuthenticationForm(request.POST)
            return render(request, 'blog/login.html', {'form': form, 'title': 'Login'})
    else:
        form = AuthenticationForm()
        return render(request, 'blog/login.html', {'form': form, 'title': 'Login'})

要使用它,您必须将您的登录行更改为urls.py

    path('login/', blog_views.login, name='login'),

推荐阅读