Django 的权限管理 (login, logout)

更新日期: 2015-12-12 阅读次数: 53489 分类: Django

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 聊聊, 查看更多联系方式