zoukankan      html  css  js  c++  java
  • Window上python开发--4.Django的用户登录模块User

    Android系统开发交流群:484966421 OSHome。

    微信公众号:oshome2015


    在搭建站点和web的应用程序时,用户的登录和管理是差点儿是每一个站点都必备的。

    今天主要从一个实例了解下面django本身自带的user模块。

    本文并不正确user进行扩展。

    主要使用原生的模块。

    1.User模块基础:

       在使用user 之前先import到自己的iew中。相当与我们自己写好的models。仅仅只是这个是系统提供的models。

    from django.contrib.auth.models import User # 导入user模块


    1.1User对象属性

               User 对象属性:username。 password(必填项)password用哈希算法保存到数据库
                email,last_login,date_joined(字面意思就知道了)
    is_staff ; 用户是否拥有站点的管理权限.
    is_active : 是否同意用户登录, 设置为``False``,能够不用删除用户来禁止 用户登录


     1.2User 对象方法

             is_authenticated(): 假设是真正的 User 对象。返回值恒为 True 。 用于检查用户是否已经通过了认证。

    通过认证并不意味着 用户拥有不论什么权限,甚至也不检查该用户是否处于激活状 态。这仅仅是表明用户成功的通过了认证。


          这种方法非常重要, 在后台用request.user.is_authenticated()推断用户是否已经登录,假设true则能够向前台展示request.user.name
      

    • :set_password(passwd)

                    这种方法是用来更改password的,先用user=User.objects.get(username='')
                     user.set_password(passeord='')
                     user.save

    • check_password(passwd)

               用户须要改动password的时候 首先要让他输入原来的password 。假设给定的字符串通过了password检查,返回 True

    • email_user(subj, msg)

       给用户发送电子邮件,用 DEFAULT_FROM_EMAIL 的设 置作为发件人。也能够用第3个參数 from_email 来 覆盖设置。



    1.3;创建User用户

       使用 create_user 辅助函数创建用户:
       from django.contrib.auth.models import User
       user = User.objects.create_user(username='',password='',email='')
       user.save 注意这里不是save()。



     1.4. 登录和认证

            Django 在 django.contrib.auth 中提供了两个函数来处理这些事情—— authenticate() 和 login()

       authenticate(): 认证给出的username和password。使用 authenticate() 函数。它接受两个參数,username username 和 password password ,并在password对用给出的username是合法的情况下返回一个 User 对象。当给出的password不合法的时候 authenticate() 函数返回 None
        login() :该函数接受一个 HttpRequest 对象和一个 User 对象作为參数并使用Django的会话( session )框架把用户的ID保存在该会话中
        from django.contrib import auth
       user = auth.authenticate(username=username, password=password)
       if user:
          auth.login(request, user)

    1.5.注销和重定向

    注销 logout()该函数接受一个 HttpRequest 对象作为參数。没有返回值
          auth.logout(request)

    重定向:HttpResponseRedirect()该函数主要实现,url的重定向。

    在我们登录和注销后,重定向到指定url。该函数能够採用url的硬编码。

     return HttpResponseRedirect('/sbook/sb_show')

    2.实现用户注冊和登录

      通过上面的基础知识,我们已经了解怎样创建和更新一个user啦。接下来用一个实例来做一下用户的注冊和登录。

    案子mvc的模型。系统已经提供了model,所以我们要做的仅仅须要实现iew和template即可了。在view.py 中实现对注冊和登录的控制。

    先看下面view中的代码

    def alogin(request):
        errors= []
        account=None
        password=None
        if request.method == 'POST' :
            if not request.POST.get('account'):
                errors.append('Please Enter account')
            else:
                account = request.POST.get('account')
            if not request.POST.get('password'):
                errors.append('Please Enter password')
            else:
                password= request.POST.get('password')
            if account is not None and password is not None :
                 user = authenticate(username=account,password=password)
                 if user is not None:
                     if user.is_active:
                         login(request,user)
                         return HttpResponseRedirect('/index')
                     else:
                         errors.append('disabled account')
                 else :
                      errors.append('invaild user')
        return render_to_response('account/login.html', {'errors': errors})
    def register(request):
        errors= []
        account=None
        password=None
        password2=None
        email=None
        CompareFlag=False
    
        if request.method == 'POST':
            if not request.POST.get('account'):
                errors.append('Please Enter account')
            else:
                account = request.POST.get('account')
            if not request.POST.get('password'):
                errors.append('Please Enter password')
            else:
                password= request.POST.get('password')
            if not request.POST.get('password2'):
                errors.append('Please Enter password2')
            else:
                password2= request.POST.get('password2')
            if not request.POST.get('email'):
                errors.append('Please Enter email')
            else:
                email= request.POST.get('email')
    
            if password is not None and password2 is not None:
                if password == password2:
                    CompareFlag = True
                else :
                    errors.append('password2 is diff password ')
    
    
            if account is not None and password is not None and password2 is not None and email is not None and CompareFlag :
                user=User.objects.create_user(account,email,password)
                user.is_active=True
                user.save
                return HttpResponseRedirect('/account/login')
    
    
        return render_to_response('account/register.html', {'errors': errors})
    
    def alogout(request):
        logout(request)
        return HttpResponseRedirect('/index')

    从以上的代码中。我们是在template里创建的form。

    在templates下创建account文件夹。在以下创建login.html

    <!DOCTYPE html>
    <html>
    <head>
        <title>Welcome login </title>
    </head>
    <body>
        <p>Account Login </p>
    
        {% if errors %}
            <li>
                {% for error in errors %}
                 <p style="color: red;">
                    Please correct the error: {{error}} below.
                 </p>
                  {% endfor %}
            </li>
        {% endif %}
    
        <form action="" method="post">
            <input type = 'text' placeholder="Please input account" name="account">
           <br>
    
            <input type = 'password' placeholder="Please input password" name="password">
            <br>
            <input type = 'submit' placeholder="Login" value="Login">
            <br>
            <a href="/account/register">register new accout</a>
        </form>
    </body>
    </html>
    相同的方式创建register.html

    <html>
    <head>
        <title>Welcome Register New Account</title>
    </head>
    <body>
    
     {% if errors %}
            <li>
    
                {% for error in errors %}
                 <p style="color: red;">
                    Please correct the error: {{error}} below.
                 </p>
                  {% endfor %}
            </li>
        {% endif %}
    <table>
        <form action="" method="post">
            <tr>
                <td>
                    <label >Account:</label>
                </td>
                <td>
                    <input type = 'text' placeholder="Please input account" name = 'account'>
                </td>
            </tr>
            <tr>
                <td>
                    <label >Password:</label>
                </td>
                <td>
                  <input type = 'password' placeholder="Please input password" name = 'password'>
                </td>
            </tr>
             <tr>
                 <td>
                    <label >Password:</label>
                 </td>
                 <td>
                     <input type = 'password' placeholder="Please input password" name ='password2'>
                 </td>
    
             </tr>
             <tr>
                 <td>
                     <label>email:</label>
                 </td>
                 <td>
                     <input type="email" placeholder="Please input email" name = 'email'>
                 </td>
             </tr>
              <tr>
    
                  <td>
                       <input type = 'submit' placeholder="Login" value="Login">
                  </td>
              </tr>
        </form>
    </table>
    </body>
    </html>
    接下来view和template创建好了。仅仅有床urls的映射关系啦。

     url(r'^account/login/$', alogin),
        url(r'^account/register/$', register),
        url(r'^account/logout/$', alogout),
    ok到此为止,用户的注冊和登录就能够在在浏览器上看到效果啦。








  • 相关阅读:
    SQL 数据库中将某表中的一列数据拆分作为查询条件
    SQL数据库导入数据时提示未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。 (System.Data)
    SQL常用内置函数
    SQL常用语句
    关于网页中鼠标双击文字选中设置
    SQL数据库查询列的类型及长度
    ASP. NET MVC项目 使用iTextSharp将网页代码生成PDF文件
    eslint-config-airbnb vs prettier vs standard
    windows批处理(bat脚本)
    python日志库loguru
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6723812.html
Copyright © 2011-2022 走看看