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

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

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

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

Python 3.x

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

Python

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

受付中

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

akihirohashi
hashi

総合スコア0

Django

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

Python 3.x

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

Python

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

1回答

0評価

0クリップ

391閲覧

投稿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

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Django

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

Python 3.x

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

Python

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