2014-02-22 24 views
1

我想使用Facebook登錄以及可選的電子郵件/密碼登錄/註冊爲時尚技術應用程序的用戶創建註冊。關於在Django中創建自定義用戶模型的指導

我被困在如何完成這個過程(從博客告訴我矛盾的信息和Django文檔沒有解釋我非常需要的東西太多的例子)。

所以我的問題是:

  1. 我如何創建我的模型顯示用戶能夠登錄通過自定義設計接口(由我)/註冊,而從管理員用戶地區進行採伐,禁止他們併成爲超級用戶,但允許我(管理員)查看和控制超級用戶的常規django管理區域中的用戶。

我猜我必須先用模型/邏輯首先所以開始:

這裏是我的models.py到目前爲止我還添加字段對於用戶來說,他們將不得不從他們的個人資料存取一旦正式登錄。但當然首先他們會被要求用他們的電子郵件,用戶名和密碼登錄(如果選擇密碼/電子郵件登錄或註冊)。

Models.py:

所有的
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager 
from django.db import models 

#custom user model fro Users 

class MyUser(AbstractBaseUser): 
    username = models.CharField(max_length=40, db_index=True) 
    first_name = models.CharField(max_length=254, blank=True) 
    last_name = models.CharField(max_length=254, blank=True) 
    email = models.EmailField(max_length=254, null=False, unique=True, blank=True) 
    birthday = models.DateField(null=True, blank=True) 
    city = models.CharField(max_length=50, blank=True) 
    state = models.CharField(max_length=50, blank=True) 


user_title = models.CharField(max_length=254, blank=True) 
    user_points = models.IntegerField(null=False, blank=True) 
    avatar = FileField() 

    #admin level and additional infomation 
    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 


USERNAME_FIELD = 'email' 
REQUIRED_FIELDS = ['email', 'username'] 


class MyUserManager(object): 
    """Creates and saves a User with the given first_name, last_name, birthday,""" 
    def create_user(self, email, username, first_name, last_name, birthday, city, state, use 

r_title, user_points, avatar, password=None): 
    if not email: 
     raise ValueError('Users must have an email address') 

    user = self.model(
     email=MyUserManager.normalize_email(email), 
     first_name=first_name, 
     last_name=last_name, 
     birthday=birthday, 
     city=city 
     state=state, 
     user_title=user_title, 
     user_points=user_points, 
     avatar=avatar, 
    ) 

    user.set_password(password) 
    user.save(using=self._db) 
    return user 

def create_superuser(self, email, first_name, last_name, birthday, city, state, user_title, user_points, avatar, password): 


user = self.create_user(email, 
     password=password, 
     first_name=first_name, 
     last_name=last_name, 
     birthday=birthday, 
     city=city 
     state=state, 
     user_title=user_title, 
     user_points=user_points, 
     avatar=avatar, 
    ) 


    user = 
+0

不要創建自己的用戶模型,創建一個用戶配置文件,並使用'OneToOneField'與Django的'User'對象。那麼一切都將開箱即用。 – Martol1ni

回答

2

首先,您的自定義用戶模型看起來很好,我從第一眼。

要正確地將自定義模型與Django管理員集成,您應該將is_admin字段替換爲由Django admin is_staffis_superuser使用的兩個字段。欲瞭解更多詳情see the documentation here。這將防止非員工(而不是管理員)用戶訪問管理員,並允許您定義超級用戶授予完全訪問權限。

編輯:找到更簡單的方法,只是子類AbstractUser而不AbstractBaseUser,這是詳細的here。這裏是你的代碼,修改和任何冗餘字段(即在父類已經實現)

class MyUser(AbstractUser): 
    birthday = models.DateField(null=True, blank=True) 
    city = models.CharField(max_length=50, blank=True) 
    state = models.CharField(max_length=50, blank=True) 

    user_title = models.CharField(max_length=254, blank=True) 
    user_points = models.IntegerField(null=False, blank=True) 
    avatar = models.FileField() 

現在,來完成你只需要編寫的URL和視圖頁面的過程中,使用的清在適當的情況下,@login_required修飾符,以防止"anonymous" users訪問這些頁面。實現了@login_required裝飾

例視圖:

from django.contrib.auth.decorators import login_required 
from django.shortcuts import render 

@login_required 
def user_profile(request): 
    # render your template with the RequestContext 
    return render('profile.html') 
+0

你能用代碼示例來擴展它嗎?先謝謝你! – Amechi

+0

我已經添加了一些代碼示例以及使用管理員訪問創建自定義用戶模型的更簡單方法。如果您需要其他雜項的幫助。 Django如何,請遵循[django的教程](https://docs.djangoproject.com/en/1.6/intro/overview/) – tutuDajuju

相關問題