質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.60%

Userアカウントを作成したい(Django)

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 72

shibaba

score 0

前提・実現したいこと

Python,Djandoを使ってログイン機能(アカウント作成、ログイン、ログアウト)を作成しております。
ログイン、ログアウト機能は問題なく動作しておりますが、アカウント作成がうまく機能しておりません。

アカウントを作成する過程でエラーは出ておらず、index.htmlにきちんとrenderされております。
詳細に原因を探ろうと考え、デバック処理をかけてみたところ、どうやらうまくDBに保存できていないようです。どのように修正すれば、うまくDBに保存できますでしょうか?
ご教授お願い致します。

該当のソースコード

views.py

from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from django.contrib.auth import login, authenticate
from django.views.generic import CreateView, View
from . forms import UserCreateForm, LoginForm
from django.contrib.auth import logout


def index(request):
    user = request.user
    return render(request, "index.html", {"user": user})
# アカウント作成


class Create_account(CreateView):
    def post(self, request, *args, **kwargs):
        form = UserCreateForm(data=request.POST)
        if form.is_valid():
            form.save()
            user = authenticate(
                username=form.cleaned_data['username'],
                password=form.cleaned_data['password1'],
            )
            user = form.save()
            if user is not None:
                if user.is_active:
                    login(self.request, user, backend='Django.contrib.auth.backends.ModelBackend')
                    return render(request, "index.html", {"user": user})
        return render(request, 'create.html', {'form': form, })

    def get(self, request, *args, **kwargs):
        form = UserCreateForm(request.POST)
        return render(request, 'create.html', {'form': form, })


create_account = Create_account.as_view()

forms.py

from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.forms import AuthenticationForm
from accounts.models import User


class UserCreateForm(UserCreationForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # htmlの表示を変更可能にします
        self.fields['username'].widget.attrs['class'] = 'form-control'
        self.fields['password1'].widget.attrs['class'] = 'form-control'
        self.fields['password2'].widget.attrs['class'] = 'form-control'

    class Meta:
        model = User
        fields = ("username", "password1", "password2",)


templates/create.html

{% extends "base.html" %} 
{% block title %} 
{% endblock title %} 
{% block content %} 
<form action="{% url 'accounts:create' %}" method="post" class="form-horizontal" role="form">
    {% csrf_token %}
    <label>ユーザーID</label>
    {{ form.username }} 
    {{ form.username.errors }}
    <label>パスワード</label>
    {{ form.password1 }} 
    {{ form.password1.errors }}
    <label>パスワード(確認)</label>
    {{ form.password2 }} 
    {{ form.password2.errors }}
    <button type="submit">登録</button>
</form>
<!-- ページネーションをここに入れる -->
{% endblock content %}

<!-- jsを入れる -->
{% block script %} 
{% endblock %}


models.py

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


class User(AbstractBaseUser):
    username = models.CharField('氏名', max_length=255)
    password1 = models.CharField('パスワード', max_length=255)
    password2 = models.CharField('パスワード確認', max_length=255)

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = []

    def __str__(self):
        return self.username
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る