25

我尝试为我的页面构建登录功能。要按如下方式编辑 urls.py,它会不断打印:

无法从“django.contrib.auth.views”导入名称“登录”

我该如何处理这个问题?

from django.contrib.auth.views import login
from django.urls import path
from . import views
app_name = "users"
urlpatterns = [
    path("login/", 
         login, 
         {"template_name": "users/login.html"}, 
         name="login"),
]
4

5 回答 5

50

开始,基于函数的视图login、、logout等已被重写为基于类的视图:LoginView[Django-doc]LogoutView[Django-doc]类,如发行说明中所述。“旧”的基于函数的视图仍然可以使用,但被标记为deprecated

中,旧的基于函数的视图已被删除,如发行说明中所述。

你可以这样写:

from django.contrib.auth.views import LoginView

from django.urls import path
from . import views
app_name = "users"
urlpatterns = [
    path('login/', 
        LoginView.as_view(
            template_name='users/login.html'
        ), 
        name="login"
    ),
]
于 2018-08-18T07:58:02.463 回答
2

尝试这个

app_name = 'users'

urlpatterns = [
    url(r'^login/$', LoginView.as_view(template_name='users/login.html'), name='login'),
]
于 2019-08-25T13:59:23.520 回答
1

@Willem Van Onsem 的回答对我有用。在实现说明上,如果您宁愿将视图代码与 url 分开(如果您有一些处理要做),您会这样写urls.py(基于urls.py您的应用程序文件夹中的每个应用程序文件,这意味着您必须包含它位于与您的文件位于同一文件夹中urlpatterns的项目文件的整体中,语法为):urls.pysettings.pypath('', include('users.urls')),

    from django.urls import path

    from .views import (
        login_view
    )

    app_name = "userNamespace"
    urlpatterns = [
      path('login/', loginView.as_view(), name="login-view"),
    ]

在你的views.py文件中你会有这样的东西:

from django.shortcuts import render
from django.contrib.auth.views import (
    LoginView,
)
from users.models import User

class login_view(LoginView):
    # The line below overrides the default template path of <appname>/<modelname>_login.html
    template_name = 'accounts/login.html' # Where accounts/login.html is the path under the templates folder as defined in your settings.py file
于 2019-06-12T19:03:56.867 回答
1

您可以尝试使用以下代码:

from django.urls import path
from django.contrib.auth import views as auth_views

from . import views

app_name = 'users'
urlpatterns = [
    # Login page.
    path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'),
]
于 2020-09-08T10:15:04.387 回答
0

可以试试这个来创建一个登录表单

# views page
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login
from django.contrib import messages

def loginPage(request):
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return redirect('home')
        else:
            messages.info(request, 'Username or Password is incorrect')
    context = {}
    return render(request, 'accounts/login.html', context)

#urls
urlpatterns = [
path('login/', views.loginPage, name='login'),,
]
于 2020-08-01T16:06:17.583 回答