Skip to content

Commit 7c347be

Browse files
authored
Merge pull request #51 from pythonkr/devdev
운영 배포
2 parents 6613c38 + 9b65283 commit 7c347be

24 files changed

+223
-30
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
* @pythonkr/PyConKR-2023

.github/pull_request_template.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
### 목표
22
*
33

4-
### 작업내용
4+
### 작업 내용
55
*
66

7-
### 유의사항
8-
* 리뷰어는 `PyConKR-2023`지정 해 주세요.
7+
### 유의 사항
8+
* 리뷰어는 `PyConKR-2023`지정해주세요.
99
* 작업한 내용을 상세하게 작성해주세요.

.github/workflows/deploy_on_dev.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
- uses: actions/checkout@v2
1818
- uses: psf/black@stable
1919
with:
20-
options: "--check --verbose --exclude migrations"
20+
options: "--check --verbose"
2121

2222
- name: Set up Python ${{ matrix.python-version }}
2323
uses: actions/setup-python@v2

.github/workflows/deploy_on_prod.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
- uses: actions/checkout@v2
1717
- uses: psf/black@stable
1818
with:
19-
options: "--check --verbose --exclude migrations"
19+
options: "--check --verbose"
2020

2121
- name: Set up Python ${{ matrix.python-version }}
2222
uses: actions/setup-python@v2

.github/workflows/pull-request-merge-precondition.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ jobs:
2222

2323
- uses: psf/black@stable
2424
with:
25-
options: "--check --verbose --exclude migrations"
25+
options: "--check --verbose"
2626

2727
- uses: isort/isort-action@master
2828
with:
29-
configuration: "--check-only --diff --profile black"
29+
configuration: "--check-only --diff"
3030
requirementsFiles: "requirements.txt"
3131

3232
- name: install dependencies

program/__init__.py

Whitespace-only changes.

program/admin.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.contrib import admin
2+
3+
# Register your models here.

program/apps.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class ProgramConfig(AppConfig):
5+
default_auto_field = "django.db.models.BigAutoField"
6+
name = "program"

program/migrations/__init__.py

Whitespace-only changes.

program/models.py

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
from django.contrib.auth import get_user_model
2+
from django.db import models
3+
4+
User = get_user_model()
5+
6+
7+
class ProposalCategory(models.Model):
8+
name = models.CharField(max_length=100, db_index=True)
9+
visible = models.BooleanField(default=True)
10+
11+
def __str__(self):
12+
return self.name
13+
14+
15+
class Proposal(models.Model):
16+
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
17+
18+
title = models.CharField(max_length=255)
19+
brief = models.TextField(max_length=1000, help_text="리뷰용: 발표에 대한 간단한 설명.")
20+
desc = models.TextField(max_length=4000, help_text="리뷰용: 발표에 대한 자세한 설명")
21+
comment = models.TextField(
22+
max_length=4000, null=True, blank=True, help_text="리뷰용: 파준위에게 전하고 싶은 말"
23+
)
24+
25+
difficulty = models.CharField(
26+
max_length=15,
27+
choices=(
28+
("BEGINNER", "Beginner"),
29+
("INTERMEDIATE", "Intermediate"),
30+
("EXPERIENCED", "Experienced"),
31+
),
32+
)
33+
34+
duration = models.CharField(
35+
max_length=15,
36+
choices=(
37+
("SHORT", "25min"),
38+
("LONG", "40min"),
39+
),
40+
)
41+
42+
language = models.CharField(
43+
max_length=15,
44+
choices=(
45+
("", "---------"),
46+
("KOREAN", "Korean"),
47+
("ENGLISH", "English"),
48+
),
49+
default="",
50+
)
51+
52+
category = models.ForeignKey(
53+
ProposalCategory,
54+
on_delete=models.SET_DEFAULT,
55+
null=True,
56+
blank=True,
57+
default=14,
58+
)
59+
accepted = models.BooleanField(default=False)
60+
introduction = models.TextField(
61+
max_length=2000,
62+
null=True,
63+
blank=True,
64+
help_text="발표 소개 페이지에 들어가는 내용입니다. 변경 사항은 최대 60분 이내에 적용됩니다.",
65+
)
66+
video_url = models.CharField(
67+
max_length=255, null=True, blank=True, help_text="발표 영상 URL"
68+
)
69+
slide_url = models.CharField(
70+
max_length=255, null=True, blank=True, help_text="발표 자료 URL"
71+
)
72+
room_num = models.CharField(
73+
max_length=15,
74+
null=True,
75+
blank=True,
76+
help_text="발표장소",
77+
choices=(
78+
("101", "101"),
79+
("102", "102"),
80+
("103", "103"),
81+
("104", "104"),
82+
("105", "105"),
83+
),
84+
)
85+
created_at = models.DateTimeField(auto_now_add=True)
86+
updated_at = models.DateTimeField(auto_now=True)
87+
88+
def __str__(self):
89+
return self.title

program/serializers.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
from rest_framework.serializers import ModelSerializer
2+
3+
from program.models import Proposal, ProposalCategory
4+
5+
6+
class ProposalSerializer(ModelSerializer):
7+
class Meta:
8+
model = Proposal
9+
fields = [
10+
"user",
11+
"title",
12+
"brief",
13+
"desc",
14+
"comment",
15+
"difficulty",
16+
"duration",
17+
"language",
18+
"category",
19+
"accepted",
20+
"introduction",
21+
"video_url",
22+
"slide_url",
23+
"room_num",
24+
]
25+
26+
27+
class ProposalListSerializer(ModelSerializer):
28+
class Meta:
29+
model = Proposal
30+
fields = [
31+
"title",
32+
"brief",
33+
"difficulty",
34+
"duration",
35+
"language",
36+
"category",
37+
]
38+
39+
40+
class ProposalCategorySerializer(ModelSerializer):
41+
class Meta:
42+
model = ProposalCategory
43+
fields = [
44+
"name",
45+
]

program/tests.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.test import TestCase
2+
3+
# Create your tests here.

program/views.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.shortcuts import render
2+
3+
# Create your views here.

pyconkr/settings-dev.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import os
22

33
from pyconkr.settings import *
4+
from pyconkr.storage import *
45

56
DEBUG = True
67

@@ -22,8 +23,12 @@
2223

2324
# django-storages: S3
2425
del MEDIA_ROOT
25-
DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"
26-
STATICFILES_STORAGE = "storages.backends.s3boto3.S3StaticStorage"
26+
# DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"
27+
# STATICFILES_STORAGE = "storages.backends.s3boto3.S3StaticStorage"
28+
29+
DEFAULT_FILE_STORAGE = "pyconkr.storage.MediaStorage"
30+
STATICFILES_STORAGE = "pyconkr.storage.StaticStorage"
31+
2732
AWS_S3_ACCESS_KEY_ID = os.getenv("AWS_S3_ACCESS_KEY_ID")
2833
AWS_S3_SECRET_ACCESS_KEY = os.getenv("AWS_S3_SECRET_ACCESS_KEY")
2934
AWS_DEFAULT_REGION = "ap-northeast-2"

pyconkr/settings.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
# SECURITY WARNING: don't run with debug turned on in production!
2626
DEBUG = True
27+
APPEND_SLASH = False
2728

2829
ALLOWED_HOSTS = []
2930

@@ -47,11 +48,14 @@
4748
"status",
4849
# swagger
4950
"drf_spectacular",
51+
# cors
52+
"corsheaders",
5053
]
5154

5255
MIDDLEWARE = [
5356
"django.middleware.security.SecurityMiddleware",
5457
"django.contrib.sessions.middleware.SessionMiddleware",
58+
"corsheaders.middleware.CorsMiddleware",
5559
"django.middleware.common.CommonMiddleware",
5660
"django.middleware.csrf.CsrfViewMiddleware",
5761
"django.contrib.auth.middleware.AuthenticationMiddleware",
@@ -170,3 +174,5 @@
170174
# available SwaggerUI versions: https://github.com/swagger-api/swagger-ui/releases
171175
"SWAGGER_UI_DIST": "//unpkg.com/[email protected]",
172176
}
177+
178+
CORS_ALLOW_ALL_ORIGINS = True

pyconkr/storage.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from django.conf import settings
2+
from storages.backends.s3boto3 import S3Boto3Storage, S3StaticStorage
3+
4+
5+
class MediaStorage(S3Boto3Storage):
6+
def _get_security_token(self):
7+
return None
8+
9+
10+
class StaticStorage(S3StaticStorage):
11+
def _get_security_token(self):
12+
return None

pyconkr/urls.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
path("api-auth/", include("rest_framework.urls")),
3030
path("summernote/", include("django_summernote.urls")),
3131
path("admin/", admin.site.urls),
32-
path("sponsors/", include(sponsor.routers.get_router().urls)),
33-
path("status/", include(status.urls)),
32+
path("sponsors", include(sponsor.routers.get_router().urls)),
33+
path("status", include(status.urls)),
3434
]
3535

3636
if settings.DEBUG is True:

pyproject.toml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[tool.black]
2+
line-length = 88
3+
include = '\.pyi?$'
4+
extend-exclude = '''
5+
(
6+
migrations
7+
)
8+
'''
9+
10+
[tool.isort]
11+
extend_skip = ["migrations"]
12+
profile = "black"

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,4 @@ Pillow==9.4.0
1515
django-constance==2.9.1
1616
django-picklefield==3.1
1717
drf-spectacular==0.25.1
18+
django-cors-headers==3.14.0

sponsor/models.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class SponsorLevel(models.Model):
1717
)
1818
visible = models.BooleanField(default=True)
1919
price = models.IntegerField(default=0)
20-
limit = models.IntegerField(default=0, help_text="후원사 등급 별 구좌수")
20+
limit = models.IntegerField(default=0, help_text="후원사 등급별 구좌 수")
2121
order = models.IntegerField(default=1)
2222
created_at = models.DateTimeField(auto_now_add=True)
2323
updated_at = models.DateTimeField(auto_now=True)
@@ -64,8 +64,8 @@ class Meta:
6464

6565
creator = models.ForeignKey(
6666
User,
67-
null=True, # TODO: 추루 로그인 적용 후 입력
68-
blank=True, # TODO: 추루 로그인 적용 후 입력
67+
null=True, # TODO: 추후 로그인 적용 후 입력
68+
blank=True, # TODO: 추후 로그인 적용 후 입력
6969
on_delete=models.CASCADE,
7070
help_text="후원사를 등록한 유저",
7171
related_name="sponsor_creator",
@@ -110,7 +110,7 @@ class Meta:
110110
max_length=100,
111111
null=True,
112112
blank=True,
113-
help_text="후원사 사업자 등록번호입니다. 세금 계산서 발급에 사용됩니다.",
113+
help_text="후원사 사업자 등록 번호입니다. 세금 계산서 발급에 사용됩니다.",
114114
)
115115
business_registration_file = models.FileField(
116116
null=True,
@@ -123,13 +123,13 @@ class Meta:
123123
null=True,
124124
blank=True,
125125
upload_to=bank_book_file_upload_to,
126-
help_text="후원사 사업자 등록증 스캔본입니다. 세금 계산서 발급에 사용됩니다.",
126+
help_text="후원사 통장 사본입니다.",
127127
)
128128
url = models.CharField(
129129
max_length=255,
130130
null=True,
131131
blank=True,
132-
help_text="파이콘 홈페이지에 공개되는 후원사 홈페이지 주소입니다.",
132+
help_text="파이콘 한국 홈페이지에 공개되는 후원사 홈페이지 주소입니다.",
133133
)
134134
logo_image = SorlImageField(
135135
upload_to=logo_image_upload_to,
@@ -150,5 +150,5 @@ class Meta:
150150
created_at = models.DateTimeField(auto_now_add=True)
151151
updated_at = models.DateTimeField(auto_now=True)
152152

153-
def __str_(self):
153+
def __str__(self):
154154
return f"{self.name}/{self.level}"

sponsor/routers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55

66
def get_router():
77
router = DefaultRouter()
8-
router.register("remaining", SponsorRemainingAccountViewSet, basename="remaining")
9-
router.register("prospectus", SponsorLevelViewSet, basename="prospectus")
8+
router.register("/remaining", SponsorRemainingAccountViewSet, basename="remaining")
9+
router.register("/prospectus", SponsorLevelViewSet, basename="prospectus")
1010
router.register("", SponsorViewSet, basename="sponsor")
1111

1212
return router

0 commit comments

Comments
 (0)