Skip to content

LEEJH1029/Django

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

60 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Django1

hello world

Django ์Šคํ„ฐ๋””


Member

์กฐํ˜„ํ˜ธ ๊ณ ์šฐ์„ ๊น€์žฌ์œค ์ด์ •ํ˜„

Date

๋งค์ฃผ ์›”์š”์ผ ์˜คํ›„ 9์‹œ


Chapter4. Git & Github

Git์˜ ๊ตฌ์กฐ

git_structure

  • working directory: ํ˜„์žฌ ์ž‘์—… ์ค‘์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ์œ„์น˜ํ•œ ๋””๋ ‰ํ† ๋ฆฌ
  • Staging: commit ํ•  ํŒŒ์ผ์˜ ์˜ˆ๋น„ ์ €์žฅ์†Œ
  • Local Repository: ๊ฐ ์ปดํ“จํ„ฐ์˜ git์ด ๊ด€๋ฆฌํ•˜๋Š” ๋กœ์ปฌ ์ €์žฅ์†Œ
  • Remote Repository: ์™ธ๋ถ€์— ์œ„์น˜ํ•œ ์›๊ฒฉ ์ €์žฅ์†Œ

Git์˜ ์‚ฌ์šฉ

git ์ €์žฅ์†Œ ๋งŒ๋“ค๊ธฐ

git_init

- ๋‚˜์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ์œ„์น˜ํ•˜ ๊ณณ์œผ๋กœ ์ด๋™ ํ›„ ํ„ฐ๋ฏธ๋„์—์„œ ๋ช…๋ น ์‹คํ–‰
- git init: ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ git์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ดˆ๊ธฐํ™”
- .git ๋””๋ ‰ํ† ๋ฆฌ: Staging, Local Repository๊ฐ€ ๋“ค์–ด์žˆ์Œ
- .gitignore: ๊ฐ™์€ ์œ„์น˜์— ์žˆ๋Š” ํŒŒ์ผ์„ git์—์„œ ๋ฌด์‹œ ex) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณ„์ •, ํด๋ผ์šฐ๋“œ ์‹œํฌ๋ฆฟ ํ‚ค, ๊ฐ์ข… ๋ฏผ๊ฐ ์ •๋ณด

๋ฒ„์ „ ๋งŒ๋“ค๊ธฐ

git_status

- git status: git ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น์–ด
  - on branch main: ํ˜„์žฌ main ๋ธŒ๋žœ์น˜์— ์žˆ์Œ
  - No commits yet: ์•„์ง commitํ•œ ํŒŒ์ผ์ด ์—†์Œ
  - untracked files: ๋ฒ„์ „์„ ์•„์ง ํ•œ ๋ฒˆ๋„ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์€ ํŒŒ์ผ

git_add

- git add <file>: working directory -> staging
- git add . : working directory์— ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ์„ staging์— ์ด๋™
- git commit -m " " : staging -> local repository

git_log

- git log: ์ €์žฅ์†Œ์— ์ €์žฅ๋œ ๋ฒ„์ „์„ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉ
- git pull origin main : ์›๊ฒฉ ์ €์žฅ์†Œ์—์„œ commit์„ pullํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด
- git commit -am " " : staging๊ณผ commit์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌ, ํ•œ ๋ฒˆ์ด๋ผ๋„ commitํ•œ ์ ์ด ์žˆ๋Š” ํŒŒ์ผ์„ ๋‹ค์‹œ ์ปค๋ฐ‹ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

Github์— ์†Œ์Šค ๋ฐ˜์˜

- git remote add origin <์›๊ฒฉ์ €์žฅ์†Œ์˜ ์ฃผ์†Œ> : ์›๊ฒฉ ์ €์žฅ์†Œ์— origin(github ์ €์žฅ์†Œ ์ฃผ์†Œ)์„ ์ถ”๊ฐ€ํ•˜๊ฒ ๋‹ค๊ณ  git์—๊ฒŒ ์•Œ๋ ค ์ฃผ๋Š” ๋ช…๋ น์–ด
    ex) git remote add origin https://github.com/LEEJH1029/Django1.git
 
- git push -u origin <๋ธŒ๋žœ์น˜๋ช…> : ์ง€์—ญ ์ €์žฅ์†Œ์˜ ๋ธŒ๋žœ์น˜๋ฅผ origin์˜ ๋ธŒ๋žœ์น˜๋กœ pushํ•˜๋ผ๋Š” ๋ช…๋ น์–ด
  - -u: ์ง€์—ญ ์ €์žฅ์†Œ์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๋ธŒ๋žœ์น˜์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์˜ต์…˜. ์ฒ˜์Œ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋จ
  ex) git push -u origin main

Github๋กœ ํ˜‘์—…ํ•˜๊ธฐ

git_branch

- git clone <์›๊ฒฉ์ €์žฅ์†Œ์˜ ์ฃผ์†Œ> : ์›๊ฒฉ ์ €์žฅ์†Œ -> ์ง€์—ญ ์ €์žฅ์†Œ ๋ณต์ œ
    ex) git clone https://github.com/Likelion-Kwangwoon/Django1.git

branch

- git checkout -b <๋ธŒ๋žœ์น˜๋ช…> : branch๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น branch๋กœ ์ด๋™
- git checkout <๋ธŒ๋žœ์น˜๋ช…> : <๋ธŒ๋žœ์น˜๋ช…>์œผ๋กœ ์ด๋™
- git merge <๋ธŒ๋žœ์น˜๋ช…> : ํ˜„์žฌ ์žˆ๋Š” branch๋กœ <๋ธŒ๋žœ์น˜๋ช…>์„ ๋ณ‘ํ•ฉ

branch_merge


- git branch <๋ธŒ๋žœ์น˜๋ช…> : branch ์ƒ์„ฑ
- git switch <๋ธŒ๋žœ์น˜๋ช…> : <๋ธŒ๋žœ์น˜๋ช…>์œผ๋กœ ์ด๋™

์ฑ•ํ„ฐ 5 - ๋ณ€์ˆ˜์™€ ์ž๋ฃŒํ˜•


  • ๋ณ€์ˆ˜ ์„ ์–ธ
    • greeting = โ€œHello Worldโ€
  • ์ฃผ์˜ ์‚ฌํ•ญ
    • ๋ณ€์ˆ˜ ์‚ฌ์ด์— ๊ณต๋ฐฑ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Œ
    • ๋‹จ์–ด ์‚ฌ์ด๋Š” _ ๋กœ ์—ฐ๊ฒฐ
    • ๋ฌธ์ž์—ด์€ ์ˆซ์ž/ํŠน์ˆ˜๋ฌธ์ž๋กœ ์‹œ์ž‘์ด ๋ถˆ๊ฐ€
    • ์˜ˆ์•ฝ์–ด ๋ณ€์ˆ˜๋กœ ์„ ์–ธ ๋ถˆ๊ฐ€
    • ๊ฐ€๊ธ‰์  ์†Œ๋ฌธ์ž ์‚ฌ์šฉ

๋ฌธ์ž์—ด

  • upper, lower, strip ํ•จ์ˆ˜
  • removeprefix ํ•จ์ˆ˜ : ํŠน์ • ๋ฌธ์ž์—ด ๋ณ€์ˆ˜์—์„œ ์—†์• ๊ณ  ์‹ถ์€ ๋ถ€๋ถ„์„ ์ง€์šธ ์ˆ˜ ์žˆ์Œ
  • replace ํ•จ์ˆ˜ : replace(โ€Aโ€, โ€œBโ€)๋ฅผ ํ†ตํ•ด A๋ฅผ B๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Œ
  • f string : ๋ณ€์ˆ˜์™€ ๋ฌธ์ž์—ด์„ ํ˜ผํ•ฉํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ
    • Ex) print(fโ€{๋ณ€์ˆ˜})

์ˆซ์ž

  • ์ •์ˆ˜, ์‹ค์ˆ˜ ๊ธฐ์–ตํ•  ๊ฒƒ
  • +, -, *, / ์™€ ๊ฐ™์ด ์‚ฌ์น™ ์—ฐ์‚ฐ ๊ฐ€๋Šฅ
  • ๋ฌธ์ž์—ด - ์ˆซ์ž ๊ฐ„ ๋ณ€ํ™˜ ๊ธฐ์–ตํ•  ๊ฒƒ
    • str(), int(), float()

๋…ผ๋ฆฌํ˜•

  • True, False

๋ช…๋ น ํ”„๋กฌํ”„ํŠธ

  • text = input(โ€์„ค์น˜ ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๊นŒ ? โ€)

์ฑ•ํ„ฐ 6 - ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ˜๋ณต๋ฌธ


์กฐ๊ฑด๋ฌธ

  • If ๋ฌธ

image

๋ฐ˜๋ณต๋ฌธ

  • for ๋ฌธ
  • while ๋ฌธ

์ฑ•ํ„ฐ 7 - ์ž๋ฃŒ๊ตฌ์กฐ


๋ชฉ์ฐจ: ๋ฆฌ์ŠคํŠธ,ํŠœํ”Œ,๋”•์…”๋„ˆ๋ฆฌ


๋ฆฌ์ŠคํŠธ

*์„ ์–ธ

list=[] ์ˆซ์ž,๋ฌธ์žํ˜• ์ƒ๊ด€์—†์Œ (์ž๋ฃŒํ˜• ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†์Œ)

lst=[]

*์ถ”๊ฐ€ , ๋ฆฌ์ŠคํŠธ ๋งจ ๋’ค์— ์ถ”๊ฐ€

lst.append(value)

*์ถ”๊ฐ€ 2,์›ํ•˜๋Š” ์œ„์น˜์— ์‚ฝ์ž…

lst.insert(index,value)

*์ œ๊ฑฐ(๋ฐ์ดํ„ฐ ์‚ญ์ œ)

del lst[index]

*์ œ๊ฑฐ 2(๋ฐ์ดํ„ฐ ์‚ญ์ œ ~> ๋ฐ˜ํ™˜)

index๋ฅผ ๋„ฃ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์ง€๋งŒ ์ž˜ ์‚ฌ์šฉ x

lst.pop(index)

*์ œ๊ฑฐ 3(๋ฆฌ์ŠคํŠธ์—์„œ ์ง์ ‘ ๊ฐ’์„ ์ฐพ์•„์„œ ์‚ญ์ œ)

lst.remove(value)

*์ •๋ ฌ (c++ ์ •๋ ฌ๊ณผ ๋™์ผ)(์›๋ณธ์ด ์ •๋ ฌ๋จ)

lst.sort()

*์ •๋ ฌ2(์›๋ณธ์€ ์œ ์ง€ํ•œ ์ฑ„ ์ •๋ ฌ๋œ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ)

new=sorted(lst)

*์—ญ์ˆœ์ •๋ ฌ

lst.sort(reverse=True)

*์Šฌ๋ผ์ด์‹ฑ(๋ฆฌ์ŠคํŠธ ํ•จ์ˆ˜ ์ค‘ ์ œ์ผ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•จ) (start<= <end,jump๋Š” ๋ช‡ ์นธ์”ฉ ์ด๋™ํ• ์ง€)

lst[start:end:jump]

(0<= <4)

lst[:4]

(1<= <=end)

lst[1:]

(๋ฆฌ์ŠคํŠธ ์ œ์ผ ๋’ค์—์„œ ํ•˜๋‚˜ ์ถœ๋ ฅ๋„ ๊ฐ€๋Šฅ)

lst[-1]

(์—ญ์ˆœ์œผ๋กœ๋„ ํ•„์š”ํ•œ ๋งŒํผ ์ถœ๋ ฅ๋„ ๊ฐ€๋Šฅ)

3๋ฒˆ ์ธ๋ฑ์Šค ๋ถ€ํ„ฐ 0๋ฒˆ ์ธ๋ฑ์Šค๊นŒ์ง€ ์—ญ์ˆœ์œผ๋กœ(3,2,1,0)

lst[3::-1]
for i in lst:
     print(i) #๊ธฐ๋ณธ์ด ์ถœ๋ ฅํ›„ ์ค„๋ฐ”๊ฟˆ
  • ์ตœ๋Œ€,์ตœ์†Œ,ํ•ฉ
max(lst)  
min(lst)
sum(lst)

ํŠœํ”Œ

  • ์„ ์–ธ
tup=()
  • ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€ํ™˜๋ฒ•
list(tup)
  • ํ•จ์ˆ˜
tuple(lst).index(5)#ํŠœํ”Œ ์•ˆ์— 5 ๊ฐ’์„ ์ฐพ์•„์„œ ๊ทธ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜
tuple(lst).count(2)#lst์•ˆ์— ๊ฐ’์ด ๋ช‡ ๊ฐœ ์žˆ๋Š” ์ง€ ์ถœ๋ ฅ

๋”•์…”๋„ˆ๋ฆฌ(key:values)

  • ์„ ์–ธ
student={'student num':'12345','major':'CS'}
student['major']#'CS' ์ถœ๋ ฅ
  • ์ถ”๊ฐ€
student['์„ฑ์ ']=4.0 # {'student num': '12345', 'major': 'CS', '์„ฑ์ ': 4.0}
  • ์ˆ˜์ •
student[value]=new value
  • ์‚ญ์ œ
del student[value]#ํ‚ค๊ฐ’์„ ์ฐพ์•„์„œ key:values ๋ชจ๋‘ ์‚ญ์ œ
  • ํ•จ์ˆ˜
student.get('student num')#key ๋ฅผ ๋„ฃ์œผ๋ฉด value'12345' ์ถœ๋ ฅ
a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'}
a.keys()#์ถœ๋ ฅ dict_keys(['name', 'phone', 'birth'])
a.values()#dict_values(['pey', '010-9999-1234', '1118'])
a.items()#dict_items([('name', 'pey'), ('phone', '010-9999-1234'), ('birth', '1118')])
 a.clear()# ๋”•์…”๋„ˆ๋ฆฌ ์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’ ์‚ญ์ œ

๋ณดํ†ต ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋ณด๋‹ค๋Š” list(a.ํ•จ์ˆ˜()) ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ”๊ฟ”์„œ ์‚ฌ์šฉ

  • ๋”•์…”๋„ˆ๋ฆฌ์—์„œ์˜ ๋ฐ˜๋ณต๋ฌธ
for key,value in student.items():#key๊ฐ’๊ณผ value ๋ชจ๋‘ ์ถœ๋ ฅ๋จ
       print(key,value)
for i in student:#key ๊ฐ’๋งŒ ์ถœ๋ ฅ๋จ
    print(i)

Chapter 10

Class

๊ธฐ๋ณธ๊ตฌ์กฐ

class ํด๋ž˜์Šค๋ช…:     // ํด๋ž˜์Šค๋ช… ์ฒซ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ ์ž‘์„ฑ
	def __init__(self, ์†์„ฑ1, ์†์„ฑ2):    // self๋ฅผ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ
		self.์†์„ฑ1 = ์†์„ฑ1      // ์ดˆ๊ธฐํ™” ๊ณผ์ •
		self.์†์„ฑ2 = ์†์„ฑ2      // ์ดˆ๊ธฐํ™” ๊ณผ์ •

	def ํ•จ์ˆ˜๋ช…1(self, ๋งค๊ฐœ๋ณ€์ˆ˜):

์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

class Student:
	def __init__(self, name, major, is_graduated):
		self.name = name
		self.major = major
		self.is_graduated = is_graduated
		
	# Method: ํด๋ž˜์Šค ์•ˆ์— ๊ตฌํ˜„๋œ ํ•จ์ˆ˜
	def study(self):
		print(f'{self.name} ํ•™์ƒ์€ ๊ณต๋ถ€์ค‘์ž…๋‹ˆ๋‹ค.')

# ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
student_1 = Student('kwu', '์†Œํ”„ํŠธ์›จ์–ดํ•™๋ถ€', False)

# ๊ฐ ์†์„ฑ ์ถœ๋ ฅ
print(student_1.name)

# ๋ฉ”์†Œ๋“œ ์ถœ๋ ฅ
student_1.study()

๊ธฐ๋ณธ๊ฐ’ ์„ค์ •

class Student:
	def __init__(self, name, major):
		self.name = name
		self.major = major
		self.is_graduated = False
		
	# Method: ํด๋ž˜์Šค ์•ˆ์— ๊ตฌํ˜„๋œ ํ•จ์ˆ˜
	def study(self):
		print(f'{self.name} ํ•™์ƒ์€ ๊ณต๋ถ€์ค‘์ž…๋‹ˆ๋‹ค.')

	def edit_major(self, new_major):
		self.major = new_major

# ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
student_1 = Student('kwu1', '์†Œํ”„ํŠธ์›จ์–ดํ•™๋ถ€')

print(student_1.is_graduated)

# ์ธ์Šคํ„ด์Šค ์†์„ฑ์„ ์ˆ˜์ •. ์ง์ ‘์ ์ธ ์ˆ˜์ •์€ ์ข‹์ง€ ์•Š์€ ๋ฐฉ๋ฒ• -> ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ
student_1.major = '์ „์ž๊ณตํ•™๊ณผ'

์ƒ์†

class ํด๋ž˜์Šค ์ด๋ฆ„(์ƒ์†ํ•  ํด๋ž˜์Šค ์ด๋ฆ„)

super()

  • ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ž„์‹œ์ ์ธ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜
  • ๋ถ€๋ชจ ํด๋ž˜์Šค ์ •์˜ํ•œ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜ด
  • super().init(): ์ž์‹ ํด๋ž˜์Šค์—๋„ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์†์„ฑ๊ณผ ๋™์ผํ•œ ์†์„ฑ์ด ์ƒ์„ฑ
class ForeignStudent(Student):
	def __init__(self, name, major, country):
		super().__init__(name, major)
		self.country = country

foreign_student_1 = ForeignStudent('kw', '๊ตญ์–ด๊ตญ๋ฌธํ•™๊ณผ', '๋ฏธ๊ตญ')

๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ

  • ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ๋‹ค์‹œ ๋งŒ๋“œ๋Š” ๊ฒƒ
  • ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ ๋Œ€์‹  ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•œ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.
class ForeignStudent(Student):
	def __init__(self, name, major, country):
		super().__init__(name, major)
		self.country = country
		
	def study(self):
		print(f'{self.name} is studying.')

ํด๋ž˜์Šค ํ™œ์šฉ

# ๋‹ค๋ฅธ ํŒŒ์ผ์— ์žˆ๋Š” ํŠน์ • ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ
import classes from Student, ForeignStudent

# ๋‹ค๋ฅธ ํŒŒ์ผ์— ์žˆ๋Š” ๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ
import classes from *

Chapter 11. ํŒŒ์ผ ๋‹ค๋ฃจ๊ธฐ์™€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

ํŒŒ์ด์ฌ์—๋Š” FileNotFoundError, ZeroDivisionError, IndexError ๋“ฑ๋“ฑ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด์žฅ ์˜ˆ์™ธ๋“ค์ด ์žˆ์Œ

Python ์—๋Ÿฌ ์ข…๋ฅ˜

  1. ValueError: ๋ถ€์ ์ ˆํ•œ ๊ฐ’์„ ๊ฐ€์ง„ ์ธ์ž๋ฅผ ๋ฐ›์•˜์„ ๋•Œ ๋ฐœ์ƒ
  2. IndexError: ์ธ๋ฑ์Šค ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ์— ๋ฐœ์ƒ
  3. SyntaxError: ํŒŒ์ด์ฌ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ
  4. NameError: ์ง€์—ญ๋ณ€์ˆ˜, ์ „์—ญ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ
  5. ZeroDivisionError: 0์œผ๋กœ ๋‚˜๋ˆ„๋ ค๋Š” ๊ฒฝ์šฐ์— ๋ฐœ์ƒ
  6. FileNotFoundError: ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ์— ์ ‘๊ทผํ•˜๋ ค ํ•  ๋•Œ, ํ•ด๋‹น ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ
  7. TypeError: ์ž˜๋ชป๋œ ํƒ€์ž…์„ ์ „๋‹ฌํ–ˆ์„ ๋•Œ ๋ฐœ์ƒ
  8. AttributeError: ํด๋ž˜์Šค(๋ชจ๋“ˆ)์˜ ๊ฐ์ฒด์— ํ•ด๋‹นํ•˜๋Š” ๋ฉ”์„œ๋“œ๋‚˜ ์†์„ฑ์„ ์ž˜๋ชป ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ๋Œ€์ž…ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒ
  9. KeyError: ๋”•์…”๋„ˆ๋ฆฌ์—์„œ ์ ‘๊ทผํ•˜๋ ค๋Š” ํ‚ค ๊ฐ’์ด ์—†์„ ๋•Œ ๋ฐœ์ƒ
  10. OverFlowError: ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ

์˜ค๋ฅ˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ธฐ๋ฒ•

try, except๋ฌธ

# ์‹คํ–‰ํ•  ์ฝ”๋“œ
try:
	...

# ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์„ ๋•Œ ์‹คํ–‰ํ•  ์ฝ”๋“œ
# ๋ฐœ์ƒ ์˜ค๋ฅ˜ ์ข…๋ฅ˜: FileNotFoundError, ZeroDivisionError, IndexError, ...
except [๋ฐœ์ƒ ์˜ค๋ฅ˜[as ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ๋ณ€์ˆ˜]]:
	...

# ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์„ ๋•Œ ์‹คํ–‰ํ•  ์ฝ”๋“œ
else:
	...

try โ€ฆ finally

  • finally ์ ˆ์€ try๋ฌธ ์ˆ˜ํ–‰ ๋„์ค‘์— ์˜ˆ์™ธ ๋ฐœ์ƒ ์—ฌ๋ถ€์— ์ƒ๊ด€์—†์ด ํ•ญ์ƒ ์ˆ˜ํ–‰๋œ๋‹ค.
  • ๋ณดํ†ต finally ์ ˆ์€ ์‚ฌ์šฉํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ closeํ•ด์•ผ ํ•  ๋•Œ์— ๋งŽ์ด ์‚ฌ์šฉ
f = open('test.txt', 'w')
try:
	...
finally:
	f.close()
# try๋ฌธ์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ์˜ˆ์™ธ ๋ฐœ์ƒ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด f.close()๋กœ ์—ด๋ฆฐ ํŒŒ์ผ์„ ๋‹ซ๋Š”๋‹ค.

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌํ•˜๊ธฐ

try:
	...
except ๋ฐœ์ƒ ์˜ค๋ฅ˜ 1:
	...
except ๋ฐœ์ƒ ์˜ค๋ฅ˜ 2:
	...

์˜ค๋ฅ˜ ์ผ๋ถ€๋Ÿฌ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ

  • ํ”„๋กœ๊ทธ๋žจ์ด ์ž‘๋™ํ•˜๋‹ค๊ฐ€ ์˜๋„ํ•˜์ง€ ์•Š๊ฒŒ ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
try:
    a = int(input("1~5 ๊นŒ์ง€ ์ˆซ์ž ์ž…๋ ฅ : "))

    if a < 1 or a > 5:
        raise

    print("a")
except:
    print("์—๋Ÿฌ ๋ฐœ์ƒ")
raise ๋ฐœ์ƒ ์˜ค๋ฅ˜
raise Exception("์—๋Ÿฌ ๋ฉ”์‹œ์ง€")

ํŒŒ์ผ ์ฝ๊ธฐ / ์“ฐ๊ธฐ

ํŒŒ์ผ ์—ด๊ธฐ ๋ชจ๋“œ: 'r', 'w', 'x'
f = open("ํŒŒ์ผ ์ด๋ฆ„", 'ํŒŒ์ผ ์—ด๊ธฐ ๋ชจ๋“œ', [encoding = '์ธ์ฝ”๋”ฉ ๋ฐฉ์‹'])

# ํŒŒ์ผ์„ ๋”์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹ซ์•„์ฃผ์–ด์•ผํ•จ
f.close()

with: ํŒŒ์ผ์„ ์—ด๊ณ  ๋‹ซ๋Š” ๊ฒƒ์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค

with open("ํŒŒ์ผ ์ด๋ฆ„", 'ํŒŒ์ผ ์—ด๊ธฐ ๋ชจ๋“œ') as ํŒŒ์ผ์˜ ๋ณ„์นญ:
	์ˆ˜ํ–‰ํ•  ์ž‘์—…

ํŒŒ์ผ ์ฝ๊ธฐ

f = open("test.txt", 'r', encoding = 'UTF-8')

# read(): ํŒŒ์ผ์˜ ์ „์ฒด ๋‚ด์šฉ์„ ๋ฆฌํ„ด
print(f.read())

# readline(): ๊ฐœํ–‰ ๋ฌธ์ž ์ „๊นŒ์ง€๋งŒ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ๋ฆฌํ„ด
print(f.readline())

# readlines(): ํŒŒ์ผ์˜ ๋ชจ๋“  ์ค„์„ ์ฝ์–ด์„œ ๊ฐ๊ฐ์˜ ์ค„์„ ์š”์†Œ๋กœ ๊ฐ–๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฆฌํ„ด
print(f.readlines())

f.close()

ํŒŒ์ผ ์“ฐ๊ธฐ

# 'w'๋Š” ๊ธฐ์กด์— ํŒŒ์ผ์— ์žˆ๋˜ ๋‚ด์šฉ์„ ์ „๋ถ€ ์‚ญ์ œํ•˜๊ณ  ์ƒˆ๋กœ ์”€
f = open("test.txt", 'w', encoding = 'UTF-8')

f.write("Hello")

f.close()
# 'a'๋Š” ๊ธฐ์กด์— ํŒŒ์ผ์— ์žˆ๋˜ ๋‚ด์šฉ์— ์ด์–ด์„œ ์ž‘์„ฑ(append)
f = open("test.txt", 'a', encoding = 'UTF-8')

f.write("Hello")

f.close()

ํŒŒ์ด์ฌ Django ์‹ค์Šต

์ฑ•ํ„ฐ 1. Prologue: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ๊ธฐ์ดˆ

client_server

  • ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ ๋ธŒ๋ผ์šฐ์ €์— ์‘๋‹ต์„ ํ•œ๋‹ค.

ํ”„๋ ˆ์ž„์›Œํฌ(Framework)

  • ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๊ธฐ๋Šฅ, ๊ตฌ์กฐ์˜ ํ‹€์„ ์ œ๊ณต
  • ์‹œ์Šคํ…œ ํ๋ฆ„์„ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ œ์–ดํ•จ
  • ex) Django, Spring, Android

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Library)

  • ํŠน์ • ๊ธฐ๋Šฅ์„ ๋ชจ์•„๋‘” ์ฝ”๋“œ, ํ•จ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ์ด๋ฉฐ ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ๋„๊ตฌ
  • ์‹œ์Šคํ…œ ํ๋ฆ„์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ์–ดํ•จ
  • ex) C++ โ†’ STL, Python โ†’ Tensorflow, Pandas

์žฅ๊ณ  ์•ฑ(App)

  • ์•ฑ(App)์ด๋ž€ ์žฅ๊ณ  ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋“ˆ์„ ์˜๋ฏธํ•จ
  • ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ ์•ˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์•ฑ
  • ์žฅ๊ณ  ํ”„๋กœ์ ํŠธ ๊ด€์ ์—์„œ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์„ ๋ชจ์•„๋‘” ํŒŒ์ด์ฌ ํŒŒ์ผ
  • ์•ฑ ์ด๋ฆ„์€ ์˜๋ฌธ ๋ณต์ˆ˜ํ˜•์œผ๋กœ ์ƒ์„ฑ
  • ๋ชฉ์  ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ ๋ถ„๋ฆฌ: ์‚ฌ์šฉ์ž ์•ฑ, ๋ธ”๋กœ๊ทธ ์•ฑ, ์ธ์ฆ ์•ฑ

์žฅ๊ณ  ํ•ต์‹ฌ ์š”์†Œ

  • ORM(Object-Relational Mapping)
    • ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ธฐ์ˆ 
    • ex) Models, QuerySet API
  • Templates
    • ์ž์ฒด ํ…œํ”Œ๋ฆฟ ์‹œ์Šคํ…œ์œผ๋กœ ๋””์ž์ธ๊ณผ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋…๋ฆฝ์  ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ
    • ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ HTML ์ฝ”๋“œ๋กœ ๋ฐ”๊ฟ”์คŒ
    • HTML ํŒŒ์ผ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์žฌ์‚ฌ์šฉ, ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ
    • HTML ํŒŒ์ผ์— include, if, for ๋“ฑ ํ…œํ”Œ๋ฆฟ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • Forms
    • ์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
    • ๊ตฌ์„ฑํ•˜๊ณ ์ž ํ•˜๋Š” ํ˜•ํƒœ ๋ Œ๋”๋ง(HTML ํƒœ๊ทธ ์ƒ์„ฑ)
    • ์ œ์ถœํ•˜๋Š” ํผ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ ํ™•์ธ
  • Authentication
    • ์‹œ์Šคํ…œ ์ธ์ฆ๊ณผ ๊ถŒํ•œ๋ถ€์—ฌ ๊ธฐ๋ณธ ์ œ๊ณต
    • ๊ตฌ์„ฑ ์š”์†Œ: ์‚ฌ์šฉ์ž, ๊ถŒํ•œ, ๊ทธ๋ฃน
  • Admin
    • ๊ด€๋ฆฌ์ž ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต
    • ๋“ฑ๋ก๋œ ๋ชจ๋ธ์˜ ๊ธฐ๋ณธ์ ์ธ ์กฐํšŒ, ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ ๊ธฐ๋Šฅ ์ œ๊ณต
    • ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ, ์‚ฌ์šฉ์ž ๊ทธ๋ฃน ๊ด€๋ฆฌ, ์‚ฌ์šฉ์ž ๋ณ„ ๊ถŒํ•œ ๊ธฐ๋Šฅ ์ œ๊ณต
  • Internationalization
    • ๋™์ผํ•œ ์†Œ์Šค์ฝ”๋“œ๋กœ ํ…์ŠคํŠธ์˜ ๋ฒˆ์—ญ, ๋‚ ์งœ/์‹œ๊ฐ„/์ˆซ์ž์˜ ํฌ๋งท, ํƒ€์ž„์กด์˜ ์ง€์ • ๋“ฑ ๊ฐ™์€ ๋‹ค๊ตญ์–ด ํ™˜๊ฒฝ ์ œ๊ณต
    • ๊ฐœ๋ฐœ์ž์™€ ํ…œํ”Œ๋ฆฟ ์ž‘์„ฑ์ž๋Š” ์–ธ์–ด ๋ฐ ๋ฌธํ™”์— ๋งž๊ฒŒ ๋ฒˆ์—ญํ•˜๊ฑฐ๋‚˜ ํ˜•์‹ ์ง€์ • ๊ฐ€๋Šฅ
    • ํŠน์ • ์‚ฌ์šฉ์ž์˜ ๊ธฐ๋ณธ ์„ค์ •์— ๋”ฐ๋ผ ์›น ์•ฑ์„ ํ˜„์ง€ํ™”ํ™”
  • Security
    • ๋ณด์•ˆ์‚ฌํ•ญ ๊ธฐ๋Šฅ ์ œ๊ณต
      • CSRF(๊ต์ฐจ ์‚ฌ์ดํŠธ ์š”์ฒญ ์œ„์กฐ) ๋ณดํ˜ธ
      • SQL ์ฃผ์ž… ๋ณดํ˜ธ
      • SSL/HTTPS
      • ์„ธ์…˜ ๋ณด์•ˆ

MTV ๋””์ž์ธ ํŒจํ„ด

  • Model
    • ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐ ๋ฐ ์‹คํ–‰
  • Template
    • ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ ์—ญํ• 
    • ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œํ˜„ ๋ฐฉ์‹ ์ •์˜
  • View
    • ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• 
    • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌ

Django_flow

GET vs POST

  • GET
    • ๋ฐ์ดํ„ฐ๋ฅผ URL์˜ ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์— ํฌํ•จํ•˜์—ฌ ๋ณด๋‚ธ๋‹ค.
    • ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ์š”์ฒญ URL์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋…ธ์ถœ๋˜๋ฏ€๋กœ ๋ณด์•ˆ์— ์ทจ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์บ์‹œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์š”์ฒญ์„ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์„œ, ๋นˆ๋ฒˆํ•˜๊ฒŒ ์š”์ฒญ๋˜๋Š” ๋ฐ์ดํ„ฐ์— ์ ํ•ฉํ•˜๋‹ค.
    • ex) www.naver.com?id=abcdef&pass=1234
  • POST
    • ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ ๋ณธ๋ฌธ์— ๋‹ด์•„ ๋ณด๋‚ด๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋งŽ๊ฑฐ๋‚˜ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์ „์†กํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
    • URL์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋…ธ์ถœ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋ณด์•ˆ์„ฑ์ด ๋†’๋‹ค.
    • ์š”์ฒญ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ ์ „์†กํ•˜๋ฏ€๋กœ, ์š”์ฒญ์— ๋”ฐ๋ผ ๋” ๋งŽ์€ ์ž์›์„ ์†Œ๋น„ํ•œ๋‹ค.

์žฅ๊ณ  ์‹ค์Šต chapter 1


django์˜ ํŠน์ง•

  • ํ”„๋กœ์ ํŠธ์•ˆ์— ์—ฌ๋Ÿฌ ์•ฑ์œผ๋กœ ๊ตฌ์„ฑ ๋จ(์•ฑ์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋“ˆ์„ ์˜๋ฏธ)
  • mtv ํŒจํ„ด: ์ž๋ฐ”์˜ mvcํŒจํ„ด๊ณผ ์œ ์‚ฌํ•˜๋‚˜ ์ด๋ฆ„๋งŒ ์กฐ๊ธˆ ๋ณ€๊ฒฝ๋œ ๋А๋‚Œ model- view -controller(java)==model-template-view(python)
  • Model - ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ Template - ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ ์—ญํ•  View- ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• 

django ์‚ฌ์šฉ๋ฒ•

ํ”„๋กœ์ ํŠธ

  • ์ƒ์„ฑ: django-admin startproject mytestsite ( django-admin startproject ํ”„๋กœ์ ํŠธ๋ช…) config.์ด default

  • ๊ฐ€์ƒํ™˜๊ฒฝ์— ์„ค์ •ํ•˜๋Š” ์ด์œ : global dependancy๋Š” ์ข‹์ง€ ์•Š์€ ๋ฐฉ์‹์ด๋ฏ€๋กœ ์ด๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ

  • ์‹คํ–‰:

 python manage.py runserver  **์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ƒ์„ฑํ•œ ํ”„๋กœ์ ํŠธ(mytestsite)๋กœ ์ด๋™ํ•œ ํ›„ ์‹คํ–‰

ex) cd mytestsite - python manage.py runserver

์•ฑ ์ƒ์„ฑ

  • django-admin startapp (์ด๋ฆ„)

setting.py์— ํ•ญ์ƒ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ ์•ฑ์„ ์ถ”๊ฐ€ ํ•ด์ค˜์•ผ๋จ

templates

  • ์ƒˆ๋กœ ๋งŒ๋“  ์•ฑ์— 'templates' ํด๋” ์ƒ์„ฑ

http

  • GET- read

์„œ๋ฒ„์—๊ฒŒ Resource๋ฅผ ๋ณด๋‚ด๋„๋ก ์š”์ฒญํ•˜๋Š”๋ฐ ์‚ฌ์šฉ (์„œ๋ฒ„์˜ Resource๋ฅผ ์ฝ์Œ)

  • PUT- create

์„œ๋ฒ„์— ๋ฌธ์„œ๋ฅผ ์“ธ๋•Œ ์‚ฌ์šฉ (GET๊ณผ ๋ฐ˜๋Œ€)

  • POST- update

Server์— Input Data๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•จ (HTML form์— ๋งŽ์ด ์‚ฌ์šฉ)

  • DELETE- delete

์š”์ฒญ Resource๋ฅผ ์‚ญ์ œํ•˜๋„๋ก ์š”์ฒญ


์ฑ•ํ„ฐ9. ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค ๋ฐฐํฌํ•˜๊ธฐ

1. ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์žฅ๊ณ  ํ”„๋กœ์ ํŠธ ์„ค์ •ํ•˜๊ธฐ

  • config - settings.py ๋ถ„๋ฆฌ
  • https://docs.djangoproject.com/ko/4.2/howto/deployment/
  • DEBUG = False
  • SERCRET_KEY: ํ‚ค ๊ฐ’์„ ๊ณต๊ฐœํ•˜๋ฉด ์•ˆ๋จ
  • init.py: ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€๋กœ ์ธ์‹ํ•˜๊ธฐ ์œ„ํ•œ ํŒŒ์ผ
  • base.py: ์šด์˜ํ™˜๊ฒฝ๊ณผ ์ƒ๊ด€์—†์ด ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ๋ถ€๋ถ„
    • BASE_DIR = Path(file).resolve().parent.parent.parent
  • development.py: ๊ฐœ๋ฐœํ™˜๊ฒฝ. ์„œ๋ฒ„
    • DEBUG. ALLOWED_HOSTS. DATABASES. STATIC_ROOT
  • local.py: ์ž‘์—…ํ•˜๋Š” ํ™˜๊ฒฝ
    • DEBUG. ALLOWED_HOSTS. INSTALLED_APPS. DATABASES. STATICFILES_DIRS
  • production.py: ์šด์˜ ํ™˜๊ฒฝ
    • DEBUG. ALLOWED_HOSTS. DATABASES. STATICFILES_DIRS
  • INSTALLED_APPS: django ์•ฑ๊ณผ ์‚ฌ์šฉ์ž ์•ฑ ๋ถ„๋ฆฌ
  • ์„ค์น˜ํ•ด์•ผํ•˜๋Š” ํŒจํ‚ค์ง€๋“ค์„ requirements์— ์ €์žฅ
    • pip freeze > requirements.txt
    • pip install -r requirements.txt

2. AWS์— ํ”„๋กœ์ ํŠธ ๋ฐฐํฌํ•˜๊ธฐ


๊ฐ•์˜ github

https://github.com/3chamchi/project-lion-backend-django

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%