9/13, Mon
environment:
python 3.8.10 -> currently
virtualenv - the name of it
app name ? ->
giftapp_api ?
start project
django-admin startproject giftapp_api .
django-admin startapp api
1. edit backend/giftapp_api/settings.py
code:python:/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# add apps
'corsheaders',
'rest_framework',
'api.apps.ApiConfig',
'djoser',
]
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',
# add
'corsheaders.middleware.CorsMiddleware',
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'giftapp_db',
"USER": "admin",
"PASSWORD": "rpcstudio",
"HOST": "database-3.cocmmo76mlqr.ap-northeast-1.rds.amazonaws.com",
"PORT": "3306"
}
}
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
}
# using custum user model
AUTH_USER_MODEL = "api.User"
import os
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
add this sentence
code:python:manage.py
pymysql.install_as_MySQLdb()
2. edit urls.py
code:python:/giftapp_api/urls.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import include
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include("api.urls")),
]
urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
create /api/urls.py
code:python:/api/urls.py
from rest_framework import routers
from django.urls import path
from django.conf.urls import include
router = routers.DefaultRouter()
urlpatterns = [
path('', include(router.urls))
]
3. edit models.py
database:
create models.py
code:python:/api/models.py
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
import uuid
class UserManager(BaseUserManager):
def create_user(self, loginid, password, **extra_fields):
user = self.model(
loginid = loginid,
**extra_fields
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, loginid, password, **extra_fields):
user = self.create_user(
loginid=loginid,
password=password,
**extra_fields
)
user.is_staff = True
user.is_superuser = True
user.save(using=self._db)
return user
def load_path_icon(instance, filename):
ext = filename.split(".")-1 class User(AbstractBaseUser, PermissionsMixin):
id = models.UUIDField(default=uuid.uuid4,
primary_key=True, editable=False)
loginid = models.CharField(max_length=32, unique=True, blank=False)
username = models.CharField(max_length=255, blank=False)
firstname = models.CharField(max_length=16, blank=False)
lastname = models.CharField(max_length=16, blank=False)
iconimage = models.ImageField(blank=True, upload_to=load_path_icon)
birthday = models.DateField(blank=False, default="1997-02-07")
zipcode = models.CharField(max_length=8,blank=False)
address = models.CharField(max_length=255, blank=False)
#address = models.OneToOneField("Address", blank=True, on_delete=models.CASCADE) friends = models.ManyToManyField("self", blank=True, symmetrical=False)
wishlists = models.ForeignKey("Wishlist", blank=True, null=True, on_delete=models.CASCADE)
tags = models.ManyToManyField("PreferenceTag", blank=True)
is_recommend = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
objects = UserManager()
USERNAME_FIELD = "loginid"
REQUIRED_FIELDS = []
def __str__(self):
return self.username
# class Address(models.Model):
# zip_code = models.CharField(max_length=8,blank=True,)
# address = models.CharField(max_length=255,blank=True,)
class PreferenceTag(models.Model):
name = models.CharField(max_length=255, blank=False)
# users = models.ManyToManyField("User")
class Product(models.Model):
name = models.CharField(max_length=255, blank=False)
wishlists = models.ManyToManyField("Wishlist")
tags = models.ManyToManyField("PreferenceTag")
url = models.CharField(max_length=255, blank=False)
class Wishlist(models.Model):
name = models.CharField(max_length=255, blank=False)
# ユーザーとウィッシュリストは1対多(ユーザーは複数のウィッシュリストを持つ)
# user = models.ForeignKey(User, on_delete=models.CASCADE)
products = models.ManyToManyField("Product")
choices
API ()
User CRUD
create(add) Friend relation
search items using tag (using rakuten ichiga api) 検索するAPI (楽天市場apiを使用)
wishlist CRUD
おくりものナビをスクレイピングするapi
友達の住所を出力(暗号化?)