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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

1回答

1243閲覧

Django 認証機能(django-allauth) を別のアプリケーションと紐づけたい

akihirohashi

総合スコア0

Django

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2022/01/14 12:53

1.実現したいこと

1.1 appアプリケーションにaccuntsアプリケーション(認証機能)を紐づけたい。
・accuntsアプリケーション(認証機能)
・appアプリケーション

1.2 index画面(appアプリケーション)でlogin画面, sinup画面, logout画面(accuntsアプリケーション)のurlを紐付けたい。

2.発生しているエラー

django.urls.exceptions.NoReverseMatch:
Reverse for 'index' not found. 'index' is not a valid view function or pattern name.

2.1 エラー画面 No.1

イメージ説明

2.2 エラー画面 No.2

イメージ説明

3.前提

3.1 appアプリケーション

3.1.1 app/base.html

{% load static %} <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <title>{% block title %}{% endblock %}}</title> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous"/> <!-- My style --> <link rel="stylesheet" type="text/css" href="#"> {% block head %}{% endblock %} </head> <body> <div id="wrapper"> <nav class="navbar navbar-expand-lg navbar-dark navbar-customfixed-top"> <a class="navbar-brand text-warning" href="{% url 'index' %}">食 録</a> <ul class="nav navbar-nav"> {% if user.is_authenticated %} <li><a href="{% url 'app:index' %]">Home</a></li> <li><a href="{% url 'account_logout' %}">Log Out</a></li> <li><a href="#">Profile</a></li> {% else %} <li><a href="{% url 'account_login' %}">Log In</a></li> <li><a href="{% url 'accounts:signup' %}">Sign Up</a></li> {% endif %} </ul> </nav> {% block header %}{% endblock %} {% block content %}{% endblock %} <!-- Footer --> <footer class="py-5 bg-dark text-center"> <dic class="container"> <small class="text-white">&copy; SYOKU ROKU 2022</small> </dic> </footer> <!-- Optional Script --> <!-- Popper.js, then Bootstrap JS --> <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/js/bootstrap.min.js" integrity="sha384-oesi62hOLfzrys4LxRF63OJCXdXDipiYWBnvTl9Y9/TRlw5xlKIEHpNyvvDShgf/" crossorigin="anonymous"></script> </div> </body> </html>

3.1.2 app/views.py

from django.shortcuts import redirect, render from django.views import View from .models import * from .forms import * from .mixins import MonthCalendarMixin class IndexView(View): def __init__(self): profile_data = Profile.objects.all() self.params = { 'profile_data': profile_data.order_by("-id")[0], 'kcalselectform': KcalSelectForm(), 'form': MuneCreateForm(), 'formset': PostCreateFormSet(), 'month_calendar': MonthCalendarMixin().get_month_calendar, } def get(self, request): return render(request, 'app/index.html', self.params) def post(self, request): self.params['kcalselectform'] = KcalSelectForm(request.POST) self.params['form'] = MuneCreateForm(request.POST) self.params['formset'] = PostCreateFormSet(request.POST) return render(request, 'app/index.html', self.params)

3.1.3 app/urls.py

from django.shortcuts import render, redirect from django.contrib.auth.forms import UserCreationForm def signup(request): if request.method == 'POST': form = UserCreationForm(request.POST) if form.is_valid(): form.save() return redirect('login') else: form = UserCreationForm() return render(request, 'accounts/signup.html', {'form': form})

3.2 accountsアプリケーション

3.2.1 accounts/views.py

from django.shortcuts import render, redirect from django.contrib.auth.forms import UserCreationForm def signup(request): if request.method == 'POST': form = UserCreationForm(request.POST) if form.is_valid(): form.save() return redirect('login') else: form = UserCreationForm() return render(request, 'accounts/signup.html', {'form': form})

3.2.2 accounts/urls.py

from django.urls import path from . import views from django.contrib.auth import views as auth_views app_name = 'accounts' urlpatterns = [ path('signup/', views.signup, name='signup'), path('login/', auth_views.LoginView.as_view(template_name='accounts/login.html'), name='login'), path('logout/', auth_views.LogoutView.as_view(template_name='accounts/logout.html'), name='logout'), ]

3.3 プロジェクト全体のコード

3.3.1 shokuroku/urls.py (プロジェクト全体のurls.py)

from django.contrib import admin from django.urls import path, include from django.conf.urls.static import static from django.conf import settings urlpatterns = [ path('', include('app.urls')), path('accounts/', include('allauth.urls')), path('admin/', admin.site.urls), ] if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

3.3.2 shokuroku/settings.py

from pathlib import Path import os # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = '=o%kv7&*u&$ly@iu^6#jjgks3k+8g14*rvx3tk5^lf)q87(svw' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = [ 'app.apps.AppConfig',# 追加 'accounts.apps.AccountConfig', # 追加 'widget_tweaks',# 追加 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.sites', # 追加 'allauth', # 追加 'allauth.account', # 追加 'crispy_forms', # 追加 'crispy_bootstrap5', # 追加 ] AUTH_USER_MODEL = 'accounts.CustomUser' MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', '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', ] ROOT_URLCONF = 'syokuroku.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = 'syokuroku.wsgi.application' # Database # https://docs.djangoproject.com/en/3.1/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': str(BASE_DIR / 'db.sqlite3'), } } # Password validation # https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] # django-allauthで利用するdjango.contrib.sitesを使うためにサイト識別用IDを設定 SITE_ID = 1 AUTHENTICATION_BACKENDS = ( 'allauth.account.auth_backends.AuthenticationBackend', # 一般ユーザー用(メールアドレス認証) 'django.contrib.auth.backends.ModelBackend', # 管理サイト用(ユーザー名認証) ) # メールアドレス認証に変更する設定 ACCOUNT_AUTHENTICATION_METHOD = 'email' ACCOUNT_USERNAME_REQUIRED = False # サインアップにメールアドレス確認を挟むよう設定 ACCOUNT_EMAIL_VERIFICATION = 'mandatory' ACCOUNT_EMAIL_REQUIRED = True # ログイン/ログアウト後の遷移先を設定 LOGIN_URL = 'login' LOGIN_REDIRECT_URL = 'index' ACCOUNT_LOGOUT_REDIRECT_URL = 'logout' # ログアウトリンクのクリック一発でログアウトする設定 ACCOUNT_LOGOUT_ON_GET = True # django-allauthが送信するメールの件名に自動付与される先頭辞をブランクにする設定 ACCOUNT_EMAIL_SUBJECT_PREFIX = '' # デフォルトのメール送信元を設定 DEFAULT_FROM_EMAIL = 'admin@example.com' # Internationalization # https://docs.djangoproject.com/en/3.1/topics/i18n/ LANGUAGE_CODE = 'ja' TIME_ZONE = 'Asia/Tokyo' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/3.1/howto/static-files/ STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ] MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' CRISPY_TEMPLATE_PACKS = 'bootstrap5' CRISPY_TEMPLATE_PACK = 'bootstrap5'

4.試したこと

・動かして学ぶ!Python Django開発入門 書籍
・Python Django3 超入門 書籍
・【Python Webアプリ 初心者】#0 パイソンで作るウェブサイト − ジャンゴってなに?【Django3.0 ウェブアプリ】Youtube

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

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

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

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

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

guest

回答1

0

{% url 'app:index' %}としてはどうですか?

投稿2022/01/14 13:37

k888

総合スコア123

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

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

akihirohashi

2022/01/15 01:56

早速のご回答ありがとうございます。 上記のように修正したのですが、同じエラーになりました。 NoReverseMatch at / Reverse for 'index' not found. 'index' is not a valid view function or pattern name.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問