Skip to content

Commit

Permalink
Merge pull request #77 from chan000518/develop
Browse files Browse the repository at this point in the history
1차 배포
  • Loading branch information
jjyyhh0208 authored Feb 8, 2024
2 parents 5961b88 + 7c03fc0 commit a04af67
Show file tree
Hide file tree
Showing 171 changed files with 8,341 additions and 1 deletion.
182 changes: 182 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
# Created by https://www.toptal.com/developers/gitignore/api/django
# Edit at https://www.toptal.com/developers/gitignore?templates=django

### Django ###
*.log
*.pot
*.pyc
__pycache__/
local_settings.py
db.sqlite3
db.sqlite3-journal
media

### Django Migrations ###
*initial.py

# If your build process includes running collectstatic, then you probably don't need or want to include staticfiles/
# in your Git repository. Update and uncomment the following line accordingly.
# <django-project-name>/staticfiles/

### Django.Python Stack ###
# Byte-compiled / optimized / DLL files
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/

# Translations
*.mo

# Django stuff:

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
.pybuilder/
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version

# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock

# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock

# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/#use-with-ide
.pdm.toml

# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
myvenv/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# pytype static type analyzer
.pytype/

# Cython debug symbols
cython_debug/

**/migrations/**_initial.py
!**/migrations/_init_.py


# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/

# End of https://www.toptal.com/developers/gitignore/api/django
19 changes: 18 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,18 @@
# pirogrmming_final_project
# Pirogramming Final Project
## 파크골프원
: 파크골프 이용자를 위한 플랫폼
: 파크골프장 위치 및 정보 제공, 파크골프 커뮤니티, 골프 스코어 기록 등의 서비스를 제공합니다.

### 파크골프원 로고
![로고1](./docs/parkgolfone_logo1.png)
![로고2](./docs/parkgolfone_logo2.png)

### .env 파일 설정
- .env 파일에 우리끼리 공유한 토큰 키 값을 넣어서 사용

### 초기 데이터 DB에 업로드 (골프장 data, Region data)
`./server/db_init.sh`
db_init.sh 실행하면 됩니다

### 기능 명세서
https://equable-haddock-22a.notion.site/8a6847ad1dcb4355a0cccea05eeab47e?v=39ccc7b76b724883a271e4e936c58b12&pvs=4
Binary file added docs/parkgolfone_logo1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/parkgolfone_logo2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 40 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
asgiref==3.7.2
attrs==23.2.0
certifi==2023.11.17
cffi==1.16.0
charset-normalizer==3.3.2
cryptography==41.0.7
defusedxml==0.7.1
Django==5.0.1
django-allauth==0.60.1
django-environ==0.11.2
django-tinymce==3.6.1
exceptiongroup==1.2.0
geographiclib==2.0
geopy==2.4.1
h11==0.14.0
idna==3.6
mysqlclient==2.2.3
oauthlib==3.2.2
outcome==1.3.0.post0
pillow==10.2.0
pycparser==2.21
PyJWT==2.8.0
PySocks==1.7.1
python-dotenv==1.0.1
python-social-auth==0.3.6
python3-openid==3.2.0
requests==2.31.0
requests-oauthlib==1.3.1
selenium==4.17.2
sniffio==1.3.0
social-auth-app-django==5.4.0
social-auth-core==4.5.2
sortedcontainers==2.4.0
sqlparse==0.4.4
trio==0.24.0
trio-websocket==0.11.1
typing_extensions==4.9.0
tzdata==2023.4
urllib3==2.1.0
wsproto==1.2.0
Empty file.
9 changes: 9 additions & 0 deletions server/apps/communitys/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from django.contrib import admin
from apps.communitys import models
# Register your models here.

admin.site.register(models.Board)
admin.site.register(models.Comment)
admin.site.register(models.Post)
admin.site.register(models.Like)
admin.site.register(models.Scrap)
6 changes: 6 additions & 0 deletions server/apps/communitys/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class CommunitysConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'apps.communitys'
21 changes: 21 additions & 0 deletions server/apps/communitys/forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from django import forms
from .models import Board, Post, Comment
from tinymce.widgets import TinyMCE

# 객체명 : BoardForm
# 목적 : Board 객체의 name, admin 속성을 모두 받아 Form 을 만든다.
class BoardForm(forms.ModelForm):
class Meta():
model = Board
fields = ('__all__')


# 객체명 : PostForm
# 목적 : Post 객체의 title, content, photo 를 입력받아 Form 을 만든다.
class PostForm(forms.ModelForm):
content = forms.CharField(widget=TinyMCE())

class Meta:
model = Post
fields = ['title','content', 'photo']

Empty file.
76 changes: 76 additions & 0 deletions server/apps/communitys/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
from django.db import models
from apps.users.models import *
from apps.locations.models import *
from django.utils import timezone
from tinymce.models import HTMLField

# 게시판 모델
class Board (models.Model):
name = models.CharField('게시판이름', max_length=255)
thumbnail = models.ImageField('게시판대표이미지',blank=True, upload_to='communitys/boards/%Y/%m/%d')
admin = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='작성자')

def __str__(self):
return self.name

# 게시글 모델
class Post (models.Model):
board = models.ForeignKey(Board, on_delete=models.CASCADE, verbose_name='소속 게시판')
title = models.CharField('제목', max_length=255)
content = HTMLField('내용') # 게시물 내용을 html형식으로 쓸수있게
writer = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='작성자')
photo = models.ImageField('이미지', blank=True, upload_to='communitys/posts/%Y/%m/%d')
like_num = models.IntegerField(default = 0) # 좋아요 숫자
scrap_num = models.IntegerField(default = 0) # 스크랩 숫자
view_num = models.IntegerField(default = 1) # 조회수
created_date = models.DateTimeField('작성일', auto_created=True, auto_now_add=True)
updated_date = models.DateTimeField('수정일', auto_created=True, auto_now=True)
# tags = models.ManyToManyField(Tag) # 태그 추가시 주석 해제


def __str__(self):
return self.title

def save(self, *args, **kwargs):
# like_num, scrap_num이 변경되지 않았을 때만 갱신
if self.like_num == self._original_like_num or self.scrap_num == self._original_scrap_num:
self.updated_date = timezone.now()

super().save(*args, **kwargs)

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._original_like_num = self.like_num
self._original_scrap_num = self.scrap_num


# 댓글 모델
class Comment (models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE, verbose_name='소속 게시글')
content = models.CharField('내용', max_length=255)
parent_comment = models.ForeignKey('self', null=True, default = None, on_delete=models.CASCADE)
commenter = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='댓글 작성자')
child_comments_num = models.IntegerField(default = 0) # 대댓글 개수


# 댓글 좋아요 모델
class CommentLike (models.Model):
comment = models.ForeignKey(Comment, on_delete=models.CASCADE, verbose_name='소속 댓글')
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='유저')


# 좋아요 모델
class Like (models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE, verbose_name='소속 게시글')
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='유저')

# 스크랩 모델
class Scrap (models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE, verbose_name='소속 게시글')
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='유저')

# 게시판 즐겨찾기
class Bookmark(models.Model):
board = models.ForeignKey(Board, on_delete=models.CASCADE, verbose_name='소속 게시판')
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='유저')

3 changes: 3 additions & 0 deletions server/apps/communitys/tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.test import TestCase

# Create your tests here.
Loading

0 comments on commit a04af67

Please sign in to comment.