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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

786閲覧

user登録ができずsignupからloginへ遷移しない

art35

総合スコア13

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2021/10/13 09:05

編集2021/10/13 09:09

前提・実現したいこと

Djangoフレームワークでcustomuserでuser作成しながらsignupとloginページを作っています。

1、signupでnameとpasswordを登録してsigninすると、loginページへ遷移して登録した
userでloginしてhomeへ遷移するのが正の流れとしたい。

2、

発生している問題・エラーメッセージ

まだ登録していないnameでsignupしようとしてもintegrityerrorになり、
loginへ遷移してくれない。
loginに遷移するときもあるが管理画面上でnameの登録がない登録が増えている。
customuserを使用しているからなのでしょうか。

該当のソースコード

views def signupfunc(request): if request.method == "POST": username = request.POST['username'] password = request.POST['password'] try: username = User.objects.create_user(username, password) return render( request, 'login.html', {'some':100} ) except IntegrityError: return render( request, 'signup.html', {'error':'このユーザーは既に登録されています'} ) return render(request, 'signup.html') def loginfunc(request): if request.method=="POST": username = request.POST['username'] password = request.POST['password'] user = authenticate( username=username, password=password ) if user is not None: login(request,user) return redirect('ilhome') else: return render( request, 'login.html', {'error':'このユーザーは登録されていません'} ) return render( request, 'login.html',{} )
urls urlpatterns = [ path('ilhome', ilhomelist, name='ilhome'), path('login/', loginfunc, name='login'), path('logout/', logoutfunc, name='logout'), path('signup/', signupfunc, name='signup'),
model class CustomUserManager(UserManager): use_in_migrations = True def _create_user(self, password, **extra_fields): user = self.model(self, **extra_fields) user.set_password(password) user.save(using=self._db) return user def create_user(self, password, email=None, **extra_fields): extra_fields.setdefault('is_staff', False) extra_fields.setdefault('is_superuser', False) return self._create_user(password, **extra_fields) def create_superuser(self, password, email=None, **extra_fields): extra_fields.setdefault('is_staff', True) extra_fields.setdefault('is_superuser', True) if extra_fields.get('is_staff') is not True: raise ValueError('Superuser must have is_staff=True.') if extra_fields.get('is_superuser') is not True: raise ValueError('Superuser must have is_superuser=True.') return self._create_user(password, **extra_fields) class Meta: verbose_name = 'user_manager' verbose_name_plural = _('user_manager') class User(AbstractBaseUser, PermissionsMixin, TimeStampModel): uuid = models.UUIDField( default=uuid_lib.uuid4, primary_key=True, editable=False ) username_validator = UnicodeUsernameValidator() username = models.CharField( _('username'), max_length=150, unique=True, help_text=('必須項目。150文字以下。文字、数字、および@/./+/-/_のみ'), validators=[username_validator], error_messages={ 'unique': _("そのユーザーは存在します。"), } ) ---以下、省略---
template signup.html <body class= "text-center"> <main class="form-signin"> <form class="form-signin" method="POST">{% csrf_token %} {{ error }} <h1 class="h3 mb-3 fw-normal">Please sign in</h1> <!-- comment out<label for="inputEmail" class="visually-hidden">Email address</label> --> <input type="text" id="inputEmail" class="form-control" placeholder="username" name='username' required autofocus> <label for="inputPassword" class="visually-hidden">Password</label> <input type="password" id="inputPassword" class="form-control" placeholder="Password" name='password' required autofocus> <button class="w-100 btn btn-lg btn-primary" type="submit">Sign in</button> <p class="mt-5 mb-3 text-muted">&copy; 2017-2021</p> <p><a href="{% url 'login' %}">login</a></p> </form> </main> </body>
login.html <body class="text-center"> <div class="container"> <form method="POST">{% csrf_token %}<form> <h1 class="h3 mb-3 fw-normal">Please login</h1> {{ error }} <div class="form-floating" style="width:25%; margin:auto;" > <input type="text" class="form-control" id="floatingInput" placeholder="Username" name='username'> <label for="floatingInput">username</label> </div> <div class="form-floating" style="width:25%; margin:auto;"> <input type="password" class="form-control" id="floatingPassword" placeholder="Password" name='password'> <label for="floatingPassword">Password</label> </div> <button class="btn btn-lg btn-success" type="submit" style="width:20%">login</button> <p class="mt-5 mb-3 text-muted">&copy; 2017-2021</p> </form> </div> </body>

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

signupは使用せずadminでsignupしてloginから使用するようにしました。
変更点は以下です。

urls path('login/', auth_views.LoginView.as_view(template_name='base/login.html'), name='login'),

投稿2021/11/09 07:33

art35

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問