[44 | Heroku設定] << [ホーム] >> [46 | デプロイ]
「qrmenu_server」側で作業します。
「heroku CLI」をインストールします。
コマンド
brew tap heroku/brew && brew install heroku
xcodeのバージョンが古い場合、以下のようなエラーが出ます。
==> Installing heroku from heroku/brew Error: Your Command Line Tools are too outdated. Update them from Software Update in System Settings. If that doesn't show you any updates, run: sudo rm -rf /Library/Developer/CommandLineTools sudo xcode-select --install Alternatively, manually download them from: https://developer.apple.com/download/all/. You should download the Command Line Tools for Xcode 14.3.
このエラーの通り、まずsudo rm -rf /Library/Developer/CommandLineTools
とコマンドを打ち、古いライブラリを削除します。
次にsudo xcode-select --install
とタイプし、xcodeのインストールをやり直します。
そうすることでherokuCLIをインストールできるようになります。
バージョン確認します。
コマンド
xcode-select --version
~/Desktop/QRMenu/qrmenu_react $ xcode-select --version xcode-select version 2397.
「qrmenu_react」側で作業します。
今までに作成した「qrmenu_react」をビルドします。
新しく「build」フォルダが作成されます。
コマンド
npm run build
「qrmenu_server」側の「/qrmenu_server/qrmenucore」フォルダに新しく「templates」フォルダを作成します。
作成した「qrmenu_server/qrmenucore/templates」フォルダにビルドで作成された「qrmenu_react/build/index.html」ファイルをコピーします。
「qrmenu_server/qrmenucore/views.py」ファイルを編集します。
記述編集 【Desktop/QRMenu/qrmenu_server/qrmenucore/views.py】
import json import stripe from django.http import JsonResponse from django.views.decorators.csrf import csrf_exempt from django.conf import settings from django.shortcuts import render from rest_framework import generics from . import models, serializers, permissions # Create your views here. class PlaceList(generics.ListCreateAPIView): serializer_class = serializers.PlaceSerializer def get_queryset(self): return models.Place.objects.filter(owner_id=self.request.user.id) def perform_create(self, serializer): serializer.save(owner=self.request.user) class PlaceDetail(generics.RetrieveUpdateDestroyAPIView): permission_classes = [permissions.IsOwnerOrReadOnly] serializer_class = serializers.PlaceDetailSerializer queryset = models.Place.objects.all() class CategoryList(generics.CreateAPIView): permission_classes = [permissions.PlaceOwnerOrReadOnly] serializer_class = serializers.CategorySerializer class CategoryDetail(generics.UpdateAPIView, generics.DestroyAPIView): permission_classes = [permissions.PlaceOwnerOrReadOnly] serializer_class = serializers.CategorySerializer queryset = models.Category.objects.all() class MenuItemList(generics.CreateAPIView): permission_classes = [permissions.PlaceOwnerOrReadOnly] serializer_class = serializers.MenuItemSerializer class MenuItemDetail(generics.UpdateAPIView, generics.DestroyAPIView): permission_classes = [permissions.PlaceOwnerOrReadOnly] serializer_class = serializers.MenuItemSerializer queryset = models.MenuItem.objects.all() def home(request): return render(request, 'index.html') stripe.api_key = settings.STRIPE_API_SECRET_KEY @csrf_exempt def create_pyment_intent(request): try: data = json.loads(request.body) intent = stripe.PaymentIntent.create( amount = data['amount'], currency = 'jpy', payment_method = data['payment_method']['id'], off_session=True, confirm = True, ) order = models.Order.objects.create( place_id = data['place'], table = data['table'], detail = json.dumps(data['detail']), amount = data['amount'], payment_intent = intent['id'] ) return JsonResponse({ "success": True, "order": order.id, }) except Exception as e: return JsonResponse({ "success": False, "error": str(e), }) class OrderList(generics.ListAPIView): serializer_class = serializers.OrderSerializer def get_queryset(self): return models.Order.objects.filter(place__owner_id=self.request.user.id, place_id=self.request.GET.get('place')) class OrderDetail(generics.UpdateAPIView): permission_classes = [permissions.PlaceOwnerOrReadOnly] serializer_class = serializers.OrderSerializer queryset = models.Order.objects.all()
「qrmenu_server/qrmenu_server/urls.py」ファイルにパスの設定を追加します。
記述追加 【Desktop/QRMenu/qrmenu_server/qrmenu_server/urls.py】
from django.contrib import admin from django.urls import path, include, re_path from qrmenucore import views urlpatterns = [ path('admin/', admin.site.urls), path('auth/', include('djoser.urls')), path('auth/', include('djoser.urls.authtoken')), path('api/places/', views.PlaceList.as_view()), path('api/places/<pk>', views.PlaceDetail.as_view()), path('api/categories/', views.CategoryList.as_view()), path('api/categories/<pk>', views.CategoryDetail.as_view()), path('api/menu_items/', views.MenuItemList.as_view()), path('api/menu_items/<pk>', views.MenuItemDetail.as_view()), path('api/create_payment_intent/', views.create_pyment_intent), path('api/orders/', views.OrderList.as_view()), path('api/orders/<pk>', views.OrderDetail.as_view()), re_path('', views.home), ]
↓↓クリックして頂けると励みになります。
[44 | Heroku設定] << [ホーム] >> [46 | デプロイ]