在 Django 中实现用户登录,通常可以使用 Django 自带的认证系统(推荐),也可以自己写登录逻辑。下面我分几种常见方式来说明。
确保 django.contrib.auth 和 django.contrib.sessions 已启用(默认就有):
# settings.py
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.sessions',
'django.contrib.contenttypes',
]
# views.py
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect
def user_login(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:
return render(request, 'login.html', {'error': '用户名或密码错误'})
return render(request, 'login.html')
<!-- login.html -->
<form method="post">
{% csrf_token %}
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<button type="submit">登录</button>
</form>
{% if error %}
<p style="color:red">{{ error }}</p>
{% endif %}
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('login/', views.user_login, name='login'),
]
def home(request):
if request.user.is_authenticated:
return HttpResponse(f"欢迎 {request.user.username}")
return HttpResponse("请先登录")
LoginView(更简单 ✅✅)Django 自带登录视图,几乎不用写代码。
from django.contrib.auth.views import LoginView
urlpatterns = [
path('login/', LoginView.as_view(template_name='login.html'), name='login'),
]
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">登录</button>
</form>
from django.contrib.auth import logout
def user_logout(request):
logout(request)
return redirect('login')
from django.contrib.auth.decorators import login_required
@login_required
def profile(request):
return HttpResponse("个人中心")
或在 settings.py 中设置登录跳转:
LOGIN_URL = '/login/'
from django.contrib.auth.models import User
User.objects.create_user(username='tom', password='123456')
自定义 AuthenticationBackend 即可(进阶)。
| 方式 | 推荐度 | 说明 |
|---|---|---|
| Django 自带 LoginView | ⭐⭐⭐⭐⭐ | 最省事 |
| 自己写 login() | ⭐⭐⭐⭐ | 灵活 |
| JWT / DRF | ⭐⭐⭐ | 用于 API |
如果你是 前后端分离 / REST API / Vue+Django,或者想用 JWT 登录,我也可以继续帮你写示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。