↓↓クリックして頂けると励みになります。
【23 | クレジットカード登録】 << 【ホーム】 >> 【25 | ページレイアウト】
「crowdsource/urls.py」ファイルを編集します。
記述編集 【Desktop/crowdsource/crowdsource/urls.py】16行目
from django.contrib import admin from django.urls import path, include from django.contrib.auth import views as auth_views from django.conf import settings from django.conf.urls.static import static from core import views from core.customer import views as customer_views from core.courier import views as courier_views customer_urlpatters = [ path('', customer_views.home, name="home"), path('profile/', customer_views.profile_page, name="profile"), path('payment_method/', customer_views.payment_method_page, name="payment_method"), path('create_job/', customer_views.create_job_page, name="create_job"), ] courier_urlpatters = [ path('', courier_views.home, name="home"), ] urlpatterns = [ path('admin/', admin.site.urls), path('oauth/', include('social_django.urls', namespace='social')), path('', views.home), path('sign-in/', auth_views.LoginView.as_view(template_name="sign_in.html")), path('sign-out/', auth_views.LogoutView.as_view(next_page="/")), path('sign-up/', views.sign_up), path('customer/', include((customer_urlpatters, 'customer'))), path('courier/', include((courier_urlpatters, 'courier'))), ] if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
「core/customer/views.py」ファイルを編集します。
記述編集 【Desktop/crowdsource/core/customer/views.py】
import firebase_admin from firebase_admin import credentials, auth import stripe from django.shortcuts import render, redirect from django.contrib.auth.decorators import login_required from django.urls import reverse from core.customer import forms from django.contrib import messages from django.contrib.auth.forms import PasswordChangeForm from django.contrib.auth import update_session_auth_hash from django.conf import settings cred = credentials.Certificate(settings.FIREBASE_ADMIN_CREDENTIAL) firebase_admin.initialize_app(cred) stripe.api_key = settings.STRIPE_API_SECRET_KEY @login_required() def home(request): return redirect(reverse('customer:profile')) @login_required(login_url="/sign-in/?next=/customer/") def profile_page(request): user_form = forms.BasicUserForm(instance=request.user) customer_form = forms.BasicCustomerForm(instance=request.user.customer) password_form = PasswordChangeForm(request.user) if request.method == "POST": if request.POST.get('action') == 'update_profile': user_form = forms.BasicUserForm(request.POST, instance=request.user) customer_form = forms.BasicCustomerForm(request.POST, request.FILES, instance=request.user.customer) if user_form.is_valid() and customer_form.is_valid(): user_form.save() customer_form.save() messages.success(request, 'プロフィールが更新されました。') return redirect(reverse('customer:profile')) elif request.POST.get('action') == 'update_password': password_form = PasswordChangeForm(request.user, request.POST) if password_form.is_valid(): user = password_form.save() update_session_auth_hash(request, user) messages.success(request, 'パスワードが更新されました。') return redirect(reverse('customer:profile')) elif request.POST.get('action') == 'update_phone': # Get Firebase user data firebase_user = auth.verify_id_token(request.POST.get('id_token')) request.user.customer.phone_number = firebase_user['phone_number'] request.user.customer.save() messages.success(request, '電話番号が更新されました。') return redirect(reverse('customer:profile')) return render(request, 'customer/profile.html', { "user_form": user_form, "customer_form": customer_form, "password_form": password_form, }) @login_required(login_url="/sign-in/?next=/customer/") def payment_method_page(request): current_customer = request.user.customer # Remove existing card if request.method == "POST": stripe.PaymentMethod.detach(current_customer.stripe_payment_method_id) current_customer.stripe_payment_method_id = "" current_customer.stripe_card_last4 = "" current_customer.save() return redirect(reverse('customer:payment_method')) # Save stripe customer infor if not current_customer.stripe_customer_id: customer = stripe.Customer.create() current_customer.stripe_customer_id = customer['id'] current_customer.save() # Get Stripe payment method stripe_payment_methods = stripe.PaymentMethod.list( customer = current_customer.stripe_customer_id, type = "card", ) print(stripe_payment_methods) if stripe_payment_methods and len(stripe_payment_methods.data) > 0: payment_method = stripe_payment_methods.data[0] current_customer.stripe_payment_method_id = payment_method.id current_customer.stripe_card_last4 = payment_method.card.last4 current_customer.save() else: current_customer.stripe_payment_method_id = "" current_customer.stripe_card_last4 = "" current_customer.save() if not current_customer.stripe_payment_method_id: intent = stripe.SetupIntent.create( customer = current_customer.stripe_customer_id ) return render(request, 'customer/payment_method.html', { "client_secret": intent.client_secret, "STRIPE_API_PUBLIC_KEY": settings.STRIPE_API_PUBLIC_KEY, }) else: return render(request, 'customer/payment_method.html') @login_required(login_url="/sign-in/?next=/customer/") def create_job_page(request): current_customer = request.user.customer if not current_customer.stripe_payment_method_id: return redirect(reverse('customer:payment_method')) return render(request, 'customer/create_job.html')
「core/templates/customer」フォルダに「create_job.html」ファイルを新規作成します。
作成した「core/templates/customer/create_job.html」ファイルを編集します。
新規作成 【Desktop/crowdsource/core/templates/customer/create_job.html】
{% extends 'base.html' %} {% load bootstrap4 %} {% block content %} <div class="container mt-4"> <div class="row"> <!-- 左側 --> <div class="col-lg-4"> <div class="card"> <div class="card-header"> 仕事の概要 </div> <div class="card-body"> {% if not job %} <p>求人情報の概要がここに表示されます</p> {% else %} {% endif %} </div> </div> </div> <!-- 右側 --> <div class="col-lg-8"> <!-- Step tabs --> <div class="card mb-5"> <div class="card-body"> </div> </div> </div> </div> </div> {% endblock %}
「core/templates/customer/base.html」ファイルを編集します。
記述編集 【Desktop/crowdsource/core/templates/customer/base.html】
{% extends 'base.html' %} {% load static %} {% block content %} {% url 'customer:create_job' as create_job_url %} {% url 'customer:profile' as profile_url %} {% url 'customer:payment_method' as payment_method_url %} <div class="container bg-light mt-4 pt-3 pb-3"> <div class="row"> <div class="col-lg-4"> <div class="text-center"> <img src="{% if request.user.customer.avatar %}{{ request.user.customer.avatar.url }}{% else %}{% static 'img/avatar01.jpg' %}{% endif %}" alt="" class="rounded-circle mb-2" width="150"> <h4>{{ request.user.last_name }} {{ request.user.first_name }}</h4> <p class="text-secondary">{{ request.user.email }}</p> </div> <div class="list-group mt-5"> <a href="{% url 'customer:create_job' %}" class="list-group-item list-group-item-info list-group-item-action {% if request.path == create_job_url %}active{% endif %}">仕事登録</a> <a href="#" class="list-group-item list-group-item-info list-group-item-action">自分の仕事</a> <a href="{% url 'customer:profile' %}" class="list-group-item list-group-item-info list-group-item-action {% if request.path == profile_url %}active{% endif %}">プロフィール</a> <a href="{% url 'customer:payment_method' %}" class="list-group-item list-group-item-info list-group-item-action {% if request.path == payment_method_url %}active{% endif %}">支払い方法</a> </div> </div> <div class="col-lg-8"> {% block main %} {% endblock %} </div> </div> </div> {% endblock %}
ブラウザを確認します。
http://127.0.0.1:8000/customer/create_job/
クレジットカードが登録されていないと、create_jobページは表示できないようになってます。
↓↓クリックして頂けると励みになります。
【23 | クレジットカード登録】 << 【ホーム】 >> 【25 | ページレイアウト】