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 将设置的新密码保存

  • 相关阅读:
    OpenCascade Ray Tracing Rendering
    Create New Commands in Tcl
    OpenCascade Modeling Algorithms Fillets and Chamfers
    OpenCascade Modeling Algorithms Boolean Operations
    Construction of Primitives in Open Cascade
    Open Cascade Data Exchange STL
    Tcl Tk Introduction
    Open Cascade DataExchange IGES
    Netgen mesh library : nglib
    Hello Netgen
  • 原文地址:https://www.cnblogs.com/sch01ar/p/11522960.html
Copyright © 2011-2022 走看看