zoukankan      html  css  js  c++  java
  • Python

    生成数据库

    查看 auth_user 数据库

    给 auth_user 表创建一个超级用户

    邮箱地址可以不写

    再看一下 auth_user 表

    密码被加密了

    login.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>登录页面</title>
    </head>
    <body>
    
    <form action="/login/" method="post">
        {% csrf_token %}
        <p>
            用户名:
            <input type="text" name="username">
        </p>
        <p>
            密码:
            <input type="password" name="password">
        </p>
        <p>
            <input type="submit" value="登录">
        </p>
    </form>
    
    </body>
    </html>
    

    authenticate():

    该方法是用户认证功能,可以验证用户名和密码是否正确

    如果认证成功,会返回一个 User 对象;如果认证失败,会返回一个匿名对象

    authenticate() 会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的

    views.py:

    from django.shortcuts import render, redirect
    from django.contrib import auth
    
    
    def login(request):
        if request.method == "POST":
            username = request.POST.get("username")
            password = request.POST.get("password")
    
            # 判断用户名密码是否有效
            user = auth.authenticate(username=username, password=password)
            if user:
                # 如果用户名密码有效
                return redirect("/index/")
            
        return render(request, "login.html")
    
    
    def index(request):
        return render(request, "index.html")
    

    访问,http://127.0.0.1:8000/login/

    输入 admin,admin123

    验证成功

    login(HttpRequest, user):

    该函数接受一个 HttpRequest 对象,以及一个经过认证的 User 对象

    该函数实现一个用户登录的功能,它本质上会在后端为该用户生成相关 session 数据

    views.py:

    from django.shortcuts import render, redirect
    from django.contrib import auth
    
    
    def login(request):
        if request.method == "POST":
            username = request.POST.get("username")
            password = request.POST.get("password")
    
            # 判断用户名密码是否有效
            user = auth.authenticate(username=username, password=password)
            # 将登录的用户封装到 request.user
            auth.login(request, user)
            if user:
                # 如果用户名密码有效
                return redirect("/index/")
    
        return render(request, "login.html")
    
    
    def index(request):
        print(request.user.username)  # 获取到封装的 request.user 的 username
        print(request.user.password)  # 获取到封装的 request.user 的 password
        return render(request, "index.html")
    

    访问,http://127.0.0.1:8000/login/

    输入 admin,admin123

    验证成功

    看一下执行结果:

    得到的密码是加密后的

    logout():

    当调用该函数时,当前请求的 session 信息会全部被清除

    如果没有登录信息,使用该函数也不会报错

    views.py:

    from django.shortcuts import render, redirect
    from django.contrib import auth
    
    
    def login(request):
        if request.method == "POST":
            username = request.POST.get("username")
            password = request.POST.get("password")
    
            # 判断用户名密码是否有效
            user = auth.authenticate(username=username, password=password)
            # 将登录的用户封装到 request.user
            auth.login(request, user)
            if user:
                # 如果用户名密码有效
                return redirect("/index/")
    
        return render(request, "login.html")
    
    
    def index(request):
        print(request.user.username)  # 获取到封装的 request.user 的 username
        print(request.user.password)  # 获取到封装的 request.user 的 password
        return render(request, "index.html")
    
    
    def logout(request):
        auth.logout(request)
        return redirect("/login/")
    

    index.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>index 页面</title>
    </head>
    <body>
    
    <h1>这里是 index 页面</h1>
    <a href="/logout/">注销</a>
    
    </body>
    </html>
    

    访问,http://127.0.0.1:8000/login/

    输入 admin,admin123

    点击“注销”

    跳转到登录页面

    is_authenticated():

    该方法用来判断当前请求是否通过了认证

    views.py:

    from django.shortcuts import render, redirect
    from django.contrib import auth
    
    
    def login(request):
        if request.method == "POST":
            username = request.POST.get("username")
            password = request.POST.get("password")
    
            # 判断用户名密码是否有效
            user = auth.authenticate(username=username, password=password)
            # 将登录的用户封装到 request.user
            auth.login(request, user)
            if user:
                # 如果用户名密码有效
                return redirect("/index/")
    
        return render(request, "login.html")
    
    
    def index(request):
        print(request.user.username)  # 获取到封装的 request.user 的 username
        print(request.user.password)  # 获取到封装的 request.user 的 password
        ret = request.user.is_authenticated()  # 判断是否通过了认证
        print(ret)
        return render(request, "index.html")
    
    
    def logout(request):
        auth.logout(request)
        return redirect("/login/")
    

    访问,http://127.0.0.1:8000/login/

    输入 admin,admin123

    login_requierd():

    该方法可以给视图函数添加登录校验

    如果用户没有登录,则会跳转到 django 默认的登录 URL “/accounts/login/”,并传递当前访问 url 的绝对路径(登陆成功后,会重定向到该路径)

    views.py:

    from django.shortcuts import render, redirect
    from django.contrib import auth
    from django.contrib.auth.decorators import login_required
    
    
    def login(request):
        if request.method == "POST":
            username = request.POST.get("username")
            password = request.POST.get("password")
    
            # 判断用户名密码是否有效
            user = auth.authenticate(username=username, password=password)
            # 将登录的用户封装到 request.user
            auth.login(request, user)
            if user:
                # 如果用户名密码有效
                return redirect("/index/")
    
        return render(request, "login.html")
    
    
    @login_required
    def index(request):
        return render(request, "index.html")
    

    访问,http://127.0.0.1:8000/index/

    因为不存在 /account/login/ 目录

    如果需要自定义登录的 URL,可以在 settings.py 中通过 LOGIN_URL 进行修改

    访问,http://127.0.0.1:8000/index/

    create_user():

    该方法用于创建一个新的用户

    views.py:

    from django.shortcuts import HttpResponse
    from django.contrib.auth.models import User
    
    
    def reg(request):
        User.objects.create_user(username="test", password="test")  # 创建新用户
        return HttpResponse("注册成功!")
    

    访问,http://127.0.0.1:8000/reg/

    查看 auth_user 表

    添加成功

    create_superuser():

    该方法用于创建超级用户

    views.py:

    from django.shortcuts import HttpResponse
    from django.contrib.auth.models import User
    
    
    def reg(request):
        User.objects.create_superuser(username="root", password="root123", email="")  # 创建新的超级用户
        return HttpResponse("注册成功!")
    

    访问,http://127.0.0.1:8000/reg/

    查看 auth_user 表

    成功创建超级用户

    check_password(raw_password):

    该方法检查密码是否正确的,需要提供当前请求用户的密码

    密码正确返回 True,否则返回 False

    views.py:

    from django.shortcuts import render, redirect
    from django.contrib import auth
    
    
    def login(request):
        if request.method == "POST":
            username = request.POST.get("username")
            password = request.POST.get("password")
    
            # 判断用户名密码是否有效
            user = auth.authenticate(username=username, password=password)
            # 将登录的用户封装到 request.user
            auth.login(request, user)
            if user:
                # 如果用户名密码有效
                return redirect("/index/")
    
        return render(request, "login.html")
    
    
    def index(request):
        ret = request.user.check_password(raw_password="aaa")  # 检查密码是否是 aaa
        print(ret)
        return render(request, "index.html")
    

    访问,http://127.0.0.1:8000/login/

    输入 admin,admin123

    运行结果:

    set_password(raw_password):

    该方法用来修改密码

    views.py:

    from django.shortcuts import HttpResponse
    from django.contrib.auth.models import User
    
    
    def reg(request):
        user_obj = User.objects.create_user(username="test1", password="test")  # 创建新用户
        user_obj.set_password("root")  # 设置新密码
        user_obj.save()  # 保存设置的新密码
        return HttpResponse("注册成功!")
    

    新创建的用户 test1 的密码为 root,而不是 test

    这里需要用 save 将设置的新密码保存

  • 相关阅读:
    python写的文件同步服务器
    从外部调用Django模块
    python监视线程池
    RabbitMQ手册翻译 RPC服务的例子
    python logging 模块完整使用示例
    使用内存磁盘加速linux
    About learning on the internet
    [转]伟大的程序员是怎样炼成的
    RabbitMQ手册翻译 Hello World的例子
    事半功倍:你应该知道的HTML5五大特性(转)
  • 原文地址:https://www.cnblogs.com/sch01ar/p/11522960.html
Copyright © 2011-2022 走看看