Skip to content

dh00023/DjangoVueProject

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

20 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ’ก New Brand Shop Project ๐Ÿ’ก

Django Pip Vue

์ฃผ์ œ

ํ˜„์žฌ ๋ธŒ๋žœ๋“œ๊ด€์„ NEW ๋ธŒ๋žœ๋“œ ์ƒต์œผ๋กœ ๋ธŒ๋žœ๋“œ ๋งˆ๋‹ค ๋ณ„๋„ ์šด์˜ํ•˜๊ณ  ์‹ถ์€ ํ˜„์—…์˜ ๋‹ˆ์ฆˆ๊ฐ€ ์žˆ์Œ. Django & Vue.js๋ฅผ ํ†ตํ•ด ์–ด๋А์ •๋„ ๋น ๋ฅด๊ฒŒ ํ˜„์—…์— ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ”„๋กœํ† ํƒ€์ž… ๊ตฌํ˜„์„ ํ†ตํ•ด ํŒŒ์•….

newbrandshop(project)
โ”œโ”€โ”€ client(vue)
โ”‚ย ย  โ”œโ”€โ”€ public
โ”‚ย ย  โ””โ”€โ”€ src
โ””โ”€โ”€ server(django)
    โ”œโ”€โ”€ config
    โ”œโ”€โ”€ item(app)
    โ”œโ”€โ”€ magazine(app)
    โ”œโ”€โ”€ styleshare(app)
    โ””โ”€โ”€ user(app)
  • ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„ : 2019.09.23 ~ 2019.11.22

wbs

๐Ÿ—๏ธ Installation

Server

$ pip install -r server/requirements/development.txt
$ pip install -r server/requirements/production.txt

pip ๋ฅผ ์ด์šฉํ•ด์„œ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•  ๊ฒƒ์ด๋‹ค. ์ด๋•Œ pip๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด, ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ์กฐํ•ด ํ™˜๊ฒฝ ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค.

๐Ÿƒ Install pip package manager and virtualenv package

Client

๐Ÿšจ node.js ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผํ•œ๋‹ค. (๐Ÿƒ Install package of node.js)

ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์—, npm์„ ์ด์šฉํ•ด ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์•ผํ•œ๋‹ค.

new-brand-shop/client $ npm install vue

๐Ÿ’พDatabase

์ž์„ธํ•œ ์„ค๋ช…์€ ํ•˜๋‹จ์— ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

Migrate

ํ”„๋กœ์ ํŠธ์— ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” ๋ชจ๋ธ์„ Migration ํ•ด์ค€๋‹ค.

new-brand-shop $ cd server
new-brand-shop/server $ python ./manage.py makemigrations
new-brand-shop/server $ python ./manage.py migrate

Insert Data

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ›„์—๋Š” ๊ธฐ์กด์— ์ƒ์„ฑํ•ด๋‘” ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋ธ์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. (๋กœ์ปฌ ํ…Œ์ŠคํŠธ์šฉ)

new-brand-shop/server $ python ./manage.py loaddata user/fixtures/data.json
new-brand-shop/server $ python ./manage.py loaddata item/fixtures/data.json
new-brand-shop/server $ python ./manage.py loaddata styleshare/fixtures/data.json
new-brand-shop/server $ python ./manage.py loaddata magazine/fixtures/data.json

๐Ÿš€ Launch

์ค€๋น„๊ฐ€ ๋‹ค ๋˜์—ˆ๋‹ค๋ฉด, ๊ฐ๊ฐ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰์‹œ์ผœ์ค€๋‹ค.

Server

$ cd server
$ python manage.py runserver

Client

$ cd client
$ npm update
$ npm run serve

์ ‘์†ํ•˜๊ธฐ

Admin

http://local-display.cjmall.com:8000/admin/๋กœ ์žฅ๊ณ  ์–ด๋“œ๋ฏผ ํŽ˜์ด์ง€์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋‹ค.

์„œ๋น„์Šค ํŽ˜์ด์ง€

http://local-display.cjmall.com:8000/

ํ˜„์žฌ styleshare์—์„œ ๋‚ด ์Šคํƒ€์ผ ๊ณต์œ ํ•˜๊ธฐ ๋ถ€๋ถ„์€ ์–ด๋“œ๋ฏผ ํŽ˜์ด์ง€ ๋กœ๊ทธ์ธํ•œ ํ›„์— ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค.

Debug

Debug๊ฐ€ ํ•˜๊ณ ์‹ถ์€ ์ฝ”๋“œ ๋ถ€๋ถ„์— pdb.set_trace()๋ฅผ ์ž…๋ ฅํ•ด ๋””๋ฒ„๊น… ํ•  ์ˆ˜ ์žˆ๋‹ค.

import pdb; pdb.set_trace()

Create App

์ถ”๊ฐ€์ ์œผ๋กœ app์„ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์—๋Š” startapp ๋ช…๋ น์–ด๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

$ django-admin startapp <app_name>
  • config/settings/base.py ํŒŒ์ผ์— INSTALLED_APPS ๋ถ€๋ถ„์— ์ƒˆ๋กœ ์ƒ์„ฑํ•œ App Config๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.
INSTALLED_APPS = [
 	...
    # project apps
    'magazine.apps.MagazineConfig',
    'styleshare.apps.StyleshareConfig',
    'item.apps.ItemConfig',
    'user.apps.UserConfig',
    # your app config
]

๐Ÿ’พDatabase

create table

ํ…Œ์ด๋ธ”์€ ๊ฐ ์•ฑ ๋‚ด๋ถ€์˜ models.py ํŒŒ์ผ์—์„œ ์ƒ์„ฑ/์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

# app/models.py
from django.db import models
class ModelName(models.Model):
	title = models.CharField("์ œ๋ชฉ", max_length=100)
	content = models.TextField("๋‚ด์šฉ")
	created_at = models.DateTimeField("๋“ฑ๋ก์ผ", auto_now_add=True)
	# fieldname = models.FieldType("comment", **validate)

migrate

$ python ./manage.py makemigrations

makemigrations ๋กœ database migrate๋ฅผ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋งŒ์•ฝ ํ•ด๋‹น SQL๋ฌธ์„ ๋ณด๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์—๋Š” sqlmigrate ๋ช…๋ น์–ด๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

$ python ./manage.py sqlmigrate <app_name> <migration_number>
$ python ./manage.py sqlmigrate item 0001
BEGIN;
--
-- Create model Post
--
CREATE TABLE "appname_modelname" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "title" varchar(100) NOT NULL, "content" text NOT NULL, "created_at" datetime NOT NULL);
COMMIT;

makemigrations ํ›„์—๋Š” migrate ๋ช…๋ น์–ด๋กœ ํ™•์ •์ง€์–ด์ค˜์•ผํ•œ๋‹ค.

$ python ./manage.py migrate

SQL query

Manager.raw() ๋ฅผ ์ด์šฉํ•ด์„œ ORM์ด ์•„๋‹Œ SQL๋ฌธ์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (Performing raw SQL queries)

first_person = Person.objects.raw('SELECT * FROM myapp_person')[0]
def ModelManager(models.Manager):
	def with_counts(self):
	     from django.db import connection
	     with connection.cursor() as cursor:
	         cursor.execute("""
	             SELECT p.id, p.question, p.poll_date, COUNT(*)
	             FROM polls_opinionpoll p, polls_response r
	             WHERE p.id = r.poll_id
	             GROUP BY p.id, p.question, p.poll_date
	             ORDER BY p.poll_date DESC""")
	         result_list = []
	         for row in cursor.fetchall():
	             p = self.model(id=row[0], question=row[1], poll_date=row[2])
	             p.num_responses = row[3]
	             result_list.append(p)
	     return result_list

Django ORM์˜ Queryset์— ํ•ด๋‹นํ•˜๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ ค๋ฉด ๊ฐ QuerySet ๊ฐ์ฒด๋Š” ๋””๋ฒ„๊น…์„ ์œ„ํ•ด stdout์— ๋กœ๊ทธ๋‚˜ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

qs = Model.objects.filter(name='test')
print(qs.query)

๋งŒ์•ฝ์— ์ž๋™์œผ๋กœ ์•ฑ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์—๋Š” manage.py loaddata <fixtures> ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด๋œ๋‹ค.

$ python ./manage.py loaddata user/fixtures/data.json
$ python ./manage.py loaddata item/fixtures/data.json
$ python ./manage.py loaddata styleshare/fixtures/data.json
$ python ./manage.py loaddata magazie/fixtures/data.json

๋˜ํ•œ, ๋ฐ์ดํ„ฐ์™€ ํ…Œ์ด๋ธ”์„ ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

$ find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
$ find . -path "*/migrations/*.pyc" -delete
$ rm -rf config/db.sqlite3

dumpdata

dumpdata๋Š” ํ•ด๋‹น ์•ฑ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ json ํŒŒ์ผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

$ python manage.py dumpdata <app_name>.<model> --indenet 4  > file.json
$ ./manage.py dumpdata user.User --indent 4 > user/fixtures/data.json
$ ./manage.py dumpdata item.Item --indent 4 > item/fixtures/data.json
$ ./manage.py dumpdata magazine.Magazine --indent 4 > magazine/fixtures/data.json
$ ./manage.py dumpdata styleshare.StyleShare --indent 4 > styleshare/fixtures/data.json

Django Admin

๊ด€๋ จ ๋‚ด์šฉ ์ •๋ฆฌ ๋ฌธ์„œ

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published