Django5.0项目-利用admin后台,管理用户名密码
1、访问http://127.0.0.1:8000/admin
直接访问,发现需要用户名和密码才能登录,怎么创建呢?
2、创建admin管理员
D:\study\python\Django\dxtest>python manage.py createsuperuser Username (leave blank to use 'z6776'): admin Email address: admin@mail.com # 随便输的,因为必输 Password: Password (again): This password is too short. It must contain at least 8 characters. # 因为我输的密码是123456,太简单太短了,提示了错误。但仍可以无视继续创建成功。 This password is too common. This password is entirely numeric. Bypass password validation and create user anyway? [y/N]: Y Superuser created successfully.
运行项目后,登录成功
3、创建普通用户
创建成功
新建的用户就也可以登录admin控制台了。
4、使用创建的用户,进行login的登录
4.1、编码

from django.shortcuts import render from django.http import HttpResponse, HttpResponseRedirect from django.contrib import auth # Create your views here. def hello(request): return HttpResponse('ok') def login(request): return render(request, template_name='login.html') def login_action(request): if request.method == 'POST': username_ = request.POST.get('username') password_ = request.POST.get('password') if username_ and password_: # auth 是 Django 的认证模块,用于处理用户认证和权限相关的事务 # authenticate 是 auth 模块中的一个函数,用于通过用户名和密码进行身份验证,成功则返回一个对象,反之为None user = auth.authenticate(username=username_,password=password_) # if username_ == 'admin' and password_ == '123456': if user: auth.login(request,user) # 使用 login 函数将用户登录 # return render(request,'event_manage.html') # 将用户重定向到另一个 URL。它的主要作用是修改 HTTP 响应的状态码为 302(临时重定向) response = HttpResponseRedirect('/event_manage/') # response.set_cookie('username',username_,300) request.session['username'] = username_ request.session.set_expiry(30 * 60) # 将当前 session 的过期时间设置为30分钟,可以不执行这句,默认也是30分钟 return response else: return render(request, 'login.html', {'error': '用户名或密码错误'}) else: return render(request, 'login.html', {'error': '用户名和密码不能为空'}) else: return render(request, template_name='login.html') def event_manage(request): # username_ = request.COOKIES.get('username') username_ = request.session.get('username','没取到') print('通过session获取到的用户名是%s'%username_) return render(request, 'event_manage.html',{'username':username_})
4.2、效果
录入非表里的用户,提示错误
5、解决能直接访问http://127.0.0.1:8000/event_manage/的问题

from django.contrib.auth.decorators import login_required from django.shortcuts import render from django.http import HttpResponse, HttpResponseRedirect from django.contrib import auth # Create your views here. def hello(request): return HttpResponse('ok') def login(request): return render(request, template_name='login.html') def login_action(request): if request.method == 'POST': username_ = request.POST.get('username') password_ = request.POST.get('password') if username_ and password_: # auth 是 Django 的认证模块,用于处理用户认证和权限相关的事务 # authenticate 是 auth 模块中的一个函数,用于通过用户名和密码进行身份验证,成功则返回一个对象,反之为None user = auth.authenticate(username=username_, password=password_) # if username_ == 'admin' and password_ == '123456': if user: auth.login(request, user) # 使用 login 函数将用户登录 # return render(request,'event_manage.html') # 将用户重定向到另一个 URL。它的主要作用是修改 HTTP 响应的状态码为 302(临时重定向) response = HttpResponseRedirect('/event_manage/') # response.set_cookie('username',username_,300) request.session['username'] = username_ request.session.set_expiry(30 * 60) # 将当前 session 的过期时间设置为30分钟,可以不执行这句,默认也是30分钟 return response else: return render(request, 'login.html', {'error': '用户名或密码错误'}) else: return render(request, 'login.html', {'error': '用户名和密码不能为空'}) else: return render(request, template_name='login.html') @login_required # 用于确保用户已经登录后才能访问被装饰的视图。它通常用于保护敏感或受限制的页面,以确保只有已注册和已登录的用户才能访问 def event_manage(request): # username_ = request.COOKIES.get('username') username_ = request.session.get('username', '没取到') print('通过session获取到的用户名是%s' % username_) return render(request, 'event_manage.html', {'username': username_})
5.1、函数event_manage配上装饰器@login_required
配上装饰器后再访问,就提示错误了
5.2、跳转页面优化,urls.py,添加path('accounts/login/',views.login),
效果