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_})
View Code

 

 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_})
View Code

5.1、函数event_manage配上装饰器@login_required

 配上装饰器后再访问,就提示错误了

 5.2、跳转页面优化,urls.py,添加path('accounts/login/',views.login),

 效果

 

posted @ 2024-01-31 11:35  坚固的大兴  阅读(275)  评论(0)    收藏  举报