Djangoのデフォルト認証を使用して、登録とログインを処理しようとしています。そして、私は手順がかなり標準だと思いますが、私のものは間違っています。
私のsetting.py:
INSTALLED_APPS = (
'Django.contrib.admin',
'Django.contrib.auth',
'Django.contrib.contenttypes',
'Django.contrib.sessions',
'Django.contrib.messages',
'Django.contrib.staticfiles',
'books',
)
MIDDLEWARE_CLASSES = (
'Django.contrib.sessions.middleware.SessionMiddleware',
'Django.middleware.common.CommonMiddleware',
'Django.middleware.csrf.CsrfViewMiddleware',
'Django.contrib.auth.middleware.AuthenticationMiddleware',
'Django.contrib.messages.middleware.MessageMiddleware',
'Django.middleware.clickjacking.XFrameOptionsMiddleware',
)
AUTH_USER_MODEL = 'books.User'
私のbooks.models.py:
class User(AbstractUser):
account_balance = models.DecimalField(max_digits=5, decimal_places=2, default=0)
私のviews.py:
from Django.contrib.auth.forms import UserCreationForm
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
new_user = form.save()
return HttpResponseRedirect("/accounts/profile/")
else:
form = UserCreationForm()
return render(request, "registration/register.html", {'form': form,})
私のurls.py
urlpatterns = patterns('',
(r'^accounts/login/$', login),
(r'^accounts/logout/$', logout),
(r'^accounts/profile/$', profile),
(r'^accounts/register/$', register),
)
Db.sqlite3を削除してpython manage.py syncdb
、まだこのエラーメッセージがあります:
OperationalError at /accounts/register/
no such table: auth_user
Request Method: POST
Request URL: http://127.0.0.1:8000/accounts/register/
Django Version: 1.7b4
Exception Type: OperationalError
Exception Value:
no such table: auth_user
誰かが私がすべきことを説明して教えてもらえますか?
おそらくUserCreationForm
modelformを使用しているため、このエラーが発生します。このモデルでは、META
にUser
(Django.contrib.auth.models> User)がモデルとして含まれています。
class Meta:
model = User
fields = ("username",)
ここでは、独自のカスタム認証モデルを使用しているため、User
に関連するテーブルは作成されていません。そのため、ここでは独自のカスタムモデルフォームを使用する必要があります。 Metaクラスでは、modelはUser
(books.User)モデルである必要があります
./manage.py migrate
すべてのミドルウェアなどを有効にした場合、各移行が実行され、不足しているテーブルが追加されます。
あなたがする必要があるのは以下だけです:
python manage.py migrate
それとその後:
python manage.py createsuperuser
その後、ユーザー名とパスワードを選択できます。
出力例を次に示します。
Username (leave blank to use 'hp'): admin
Email address: [email protected]
Password:
Password (again):
Superuser created successfully.
これはDjangoバージョン<1.7:
コマンドでテーブルを初期化する
manage.py syncdb
これにより、テーブルを初期化するだけでなく、「スーパーユーザー」を指名することができます。
UserCreationFormサブクラスでカスタム認証モデルを使用する場合、メタコードとclean_usernameメソッドの両方をハードコードされたUserクラスを参照するため、オーバーライドする必要があります(後者はDjango 1.8まで)。
class Meta(UserCreationForm.Meta):
model = get_user_model()
def clean_username(self):
username = self.cleaned_data['username']
try:
self.Meta.model.objects.get(username=username)
except self.Meta.model.DoesNotExist:
return username
raise forms.ValidationError(
self.error_messages['duplicate_username'],
code='duplicate_username',
)
python manage.py makemigrations→→python manage.py migrate修正。
Settings.pyで定義/インストールされたアプリがプロジェクトディレクトリに存在すると仮定します。
次のフローを実行するだけです
$ Django-admin createproject <your project name>
下 <your project dict>
タイプDjango-admin createapp <app name>
下 <app name>/admin.py
from Django.contrib import admin
from .models import Post
admin.site.register(Post)
ルートプロジェクトに移動します。その後、$python manage.py migrate
次に、ユーザー名とパスワードを要求します
Djangoウェブサイトを仮想環境にデプロイしようとしたときに、「no such table:auth_user」という同じ問題に直面しました。
私の場合にうまくいった私のソリューションは次のとおりです:
次のようにデータベース設定を定義したsettings.pyファイルで:
DATABASES = {
'default': {
'ENGINE': 'Django.db.backends.sqlite3',
'NAME': os.path.join(os.getcwd(), 'db.sqlite3'),
}
}
db.sqlite3データベースまたは使用している他のデータベースを見つけて、データベースのフルパスを書き留めてください。データベース設定は次のようになります。
DATABASES = {
'default': {
'ENGINE': 'Django.db.backends.sqlite3',
'NAME': '/home/Django/django_project/db.sqlite3',
}
}
問題が解決することを願っています。
いくつのpython windows go ---> task managerのようにバックグラウンドでインスタンスが実行されているかを確認し、pythonインスタンスを確認して、タスクをすべて終了または終了します。 pythonインスタンス。「py manage.py runserver」コマンドを使用して再実行します。正常に動作することを願っています。..
これらのコマンドを呼び出す
python manage.py makemigrations
python manage.py migrate
On Django 1.11 docsの指示に従ってこれを行わなければなりませんでした https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#substituting-a -custom-user-model
# create default database:
./manage.py migrate
# create my custom model migration:
# running `./manage.py makemigrations` was not enough
./manage.py makemigrations books
# specify one-off defaults
# create table with users:
./manage.py migrate
プロジェクト/アプリで変更を行った場合は、次を実行します。
python manage.py migrate
python manage.py makemigrations
python manage.py createsuperuser
カスタムユーザーモデルを作成する前に、最初の移行を実行する必要があります。次に、ユーザーモデルのアプリケーションをインストールし、AUTH_USER_MODELを追加します。
同様に:
class UserForm(UserCreationForm):
class Meta:
model = User
fields = ("username",)
そして
python manage.py migrate auth
python manage.py migrate