前提・実現したいこと
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">© 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">© 2017-2021</p> </form> </div> </body>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。