Django 的权限管理 (login, logout)

文章目录

    Django 的在线文档太卡了

    在 Mac 上使用 Dash 将 Django 文档都缓存到本地就方便多了,可以节省大量的等待时间。

    user 表的结构

    CREATE TABLE "auth_user" (
    	"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, 
    	"password" varchar(128) NOT NULL, 
    	"last_login" datetime NOT NULL, 
    	"is_superuser" bool NOT NULL, 
    	"username" varchar(30) NOT NULL UNIQUE, 
    	"first_name" varchar(30) NOT NULL, 
    	"last_name" varchar(30) NOT NULL, 
    	"email" varchar(75) NOT NULL, 
    	"is_staff" bool NOT NULL, 
    	"is_active" bool NOT NULL, 
    	"date_joined" datetime NOT NULL
    );
    

    最简洁的实现

    利用 Django 内置的 views 可以快速搞定 login, logout, password 管理。

    例如在 urls.py 里添加,并指向自定义的模板文件。

    url(r'^login/$', 'django.contrib.auth.views.login', 
    	{'template_name': 'login.html', 'extra_context': {'next': '/'}}),
    url(r'^logout/$', 'django.contrib.auth.views.logout', 
    	{'next_page': "/"}),
    

    模板文件参考

    {% extends "base.html" %}
    
    {% block content %}
    
    {% if form.errors %}
    <p>Your username and password didn't match. Please try again.</p>
    {% endif %}
    
    <form method="post" action="{% url 'django.contrib.auth.views.login' %}">
    {% csrf_token %}
    <table>
    <tr>
        <td>{{ form.username.label_tag }}</td>
        <td>{{ form.username }}</td>
    </tr>
    <tr>
        <td>{{ form.password.label_tag }}</td>
        <td>{{ form.password }}</td>
    </tr>
    </table>
    
    <input type="submit" value="login" />
    <input type="hidden" name="next" value="{{ next }}" />
    </form>
    
    {% endblock %}
    

    更新 home view 的逻辑及模板

    def home(request):
        if request.user.is_authenticated():
            # Do something for authenticated users.
            user = request.user.username
        else:
            # Do something for anonymous users.
            user = ""
    
        context = {"user": user}
        return render(request, "home.html", context)
    
    {% if user %}
      hello {{ user }}
      <a href="/logout">退出</a>
    {% else %}
      hello world
      <a href="/login">登录</a>
    {% endif%}
    

    用户注册

    先不考虑对内置用户 model 的扩展,简单创建一个新用户为例

    参考

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式