2013-11-02

Djangoのユーザモデル

DjangoにはデフォルトでUserモデルなるものが存在します。

admin画面作ってログインしたときにAuthのところのUsersっていうモデルがそれ。

もちろん最初に作成するadminユーザもUserモデル。

 

Userモデルは以下のURLで説明があります。例のごとく英語…。

https://docs.djangoproject.com/en/dev/topics/auth/

https://docs.djangoproject.com/en/dev/topics/auth/default/

 

まずはsettings.pyのINSTALLED_APPSに

django.contrib.auth django.contrib.contenttypes

が記述されていることを確認。

記述されていないorコメントアウトされていたら、

設定後にpython manage.py syncdb

 

その後は、自由にユーザモデルを作成したり、ログインしたり。

 

1. ユーザの作成(views.py)

from django.contrib.auth.models import User
class Create(View):
    def post(self, request):
    user = User.objects.create_user(request.POST["name"], request.POST["email"], request.POST["password"])
    user.is_staff = False
    user.save()
    return redirect('user:detail', user_id=user.id)

 

is_staffはアドミンサイトにログインできるかどうかを判別(true=ログイン可能)

 

2.ユーザログイン(views.py)

class Login(View):
    def post(self, request):
        user = authenticate(username=request.POST["name"], password=request.POST["password"])
        if user is not None:
            if user.is_active:
                print("Success")
                login(request, user)
            else:
                print("Error")
        else:
            print("Credentials Incorrect")
        return redirect('user:detail', user_id=user.id)

 

ログイン後は、 request.user.is_authenticated()がtrueかfalseかで認証状況を判別して

request.userコンテキストの情報をうまく使ってアプリを作っていく感じ。

 

あとは作成したモデルにユーザ情報をひもづける場合は例のごとく

from django.db import models
from django.contrib.auth.models import User

class Task(models.Model):

    def __str__(self):
        return self.title
    title = models.CharField(max_length=255)
    description = models.TextField()
    done = models.BooleanField(default = False)
    user = models.ForeignKey(User)

のように、ForegnKey設定してあげればOK

このエントリーをはてなブックマークに追加