Django學習筆記之auth系統

User用戶

創建用戶:
from django.contrib.auth.models import User
User.objects.create_user(username=username,password=password,email=email)
驗證用戶:
from django.contrib.auth import authenticate
user = authenticate(username=username,password=password)
if user is not None:
    # 這個用戶存在數據庫中
else:
    # 這個用戶沒有存在這個數據庫中
登錄
from django.contrib.auth import authenticate, login

def my_view(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request, user)
            # 登錄成功
        else:
            # 用戶沒有被激活,不能登錄
    else:
        # 用戶名或者密碼錯誤
註銷
from django.contrib.auth import logout

  def logout_view(request):
      logout(request)
      # 註銷這個用戶。他的session信息將被清除掉。

login_required裝飾器

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    ...

如果沒有登錄成功,會跳轉到settings.LOGIN_URL指定的URL中。否則,直接執行函數中的內容。

User模型常用屬性和方法
  • username:用戶名。
  • email:郵箱。
  • groups:多對多的組。
  • user_permissions:多對多的用戶權限。
  • is_staff: 是否是admin的管理員。
  • is_active: 是否激活,判斷該用戶是否可用。
  • is_superuser: 是否是超級用戶。
  • last_login: 上次登錄時間。
  • date_joined: 註冊時間。
  • is_authenticated: 是否驗證通過了。
  • is_anonymous:是否是匿名用戶。
  • set_password(raw_password): 設置密碼,傳原生密碼進去。
  • check_password(raw_password): 檢查密碼。
  • has_perm(perm): 判斷用戶是否有某個權限。
  • has_perms(perm_list): 判斷用戶是否有權限列表中的某個列表

Permission權限模型

在模型中添加權限
from django.db import models

class BlogModel(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=100,blank=True)
    content = models.TextField()

    class Meta:
        permissions = (
            ('watch_article', u'查看文章的權限'),
            ('update_article', u'修改文章的權限'),
            ('delete_article', u'刪除文章的權限'),
            ('add_article', u'發佈文章的權限'),
        )
在代碼中添加權限
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
def test(request):
    content_type = ContentType.objects.get_for_model(BlogModel)
    permission = Permission.objects.create(
        codename='can_publish',
        name='Can Publish BlogMoModel',
        content_type=content_type,
    )
    permission.save()
    return HttpResponse('success')
用戶權限操作
myuser.user_permissions.set([permission_list])
myuser.user_permissions.add(permission, permission, ...)
myuser.user_permissions.remove(permission, permission, ...)
myuser.user_permissions.clear()
myuser.has_perm('foo.add_bar')

訪問權限的方式:appname+.+權限名稱

Group模型

  • 所屬包django.contrib.auth.models.Group
  • 創建Group:必須傳一個name參數進去。
  • Group操作:
group.permissions.set([permission_list])
group.permissions.add(permission, permission, ...)
group.permissions.remove(permission, permission, ...)
group.permissions.clear()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章