hello world
Django ์คํฐ๋
์กฐํํธ ๊ณ ์ฐ์ ๊น์ฌ์ค ์ด์ ํ
๋งค์ฃผ ์์์ผ ์คํ 9์
- working directory: ํ์ฌ ์์ ์ค์ด ํ๋ก์ ํธ๊ฐ ์์นํ ๋๋ ํ ๋ฆฌ
- Staging: commit ํ ํ์ผ์ ์๋น ์ ์ฅ์
- Local Repository: ๊ฐ ์ปดํจํฐ์ git์ด ๊ด๋ฆฌํ๋ ๋ก์ปฌ ์ ์ฅ์
- Remote Repository: ์ธ๋ถ์ ์์นํ ์๊ฒฉ ์ ์ฅ์
- ๋์ ํ๋ก์ ํธ๊ฐ ์์นํ ๊ณณ์ผ๋ก ์ด๋ ํ ํฐ๋ฏธ๋์์ ๋ช
๋ น ์คํ
- git init: ํ์ฌ ๋๋ ํ ๋ฆฌ์์ git์ ์ฌ์ฉํ ์ ์๋๋ก ์ด๊ธฐํ
- .git ๋๋ ํ ๋ฆฌ: Staging, Local Repository๊ฐ ๋ค์ด์์
- .gitignore: ๊ฐ์ ์์น์ ์๋ ํ์ผ์ git์์ ๋ฌด์ ex) ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณ์ , ํด๋ผ์ฐ๋ ์ํฌ๋ฆฟ ํค, ๊ฐ์ข
๋ฏผ๊ฐ ์ ๋ณด
- git status: git ์ํ๋ฅผ ํ์ธํ๊ธฐ ์ํ ๋ช
๋ น์ด
- on branch main: ํ์ฌ main ๋ธ๋์น์ ์์
- No commits yet: ์์ง commitํ ํ์ผ์ด ์์
- untracked files: ๋ฒ์ ์ ์์ง ํ ๋ฒ๋ ๊ด๋ฆฌํ์ง ์์ ํ์ผ
- git add <file>: working directory -> staging
- git add . : working directory์ ์๋ ๋ชจ๋ ํ์ผ์ staging์ ์ด๋
- git commit -m " " : staging -> local repository
- git log: ์ ์ฅ์์ ์ ์ฅ๋ ๋ฒ์ ์ ํ์ธํ ๋ ์ฌ์ฉ
- git pull origin main : ์๊ฒฉ ์ ์ฅ์์์ commit์ pullํ ๋ ์ฌ์ฉํ๋ ๋ช
๋ น์ด
- git commit -am " " : staging๊ณผ commit์ ํ ๋ฒ์ ์ฒ๋ฆฌ, ํ ๋ฒ์ด๋ผ๋ commitํ ์ ์ด ์๋ ํ์ผ์ ๋ค์ ์ปค๋ฐํ ๋๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- 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
- git clone <์๊ฒฉ์ ์ฅ์์ ์ฃผ์> : ์๊ฒฉ ์ ์ฅ์ -> ์ง์ญ ์ ์ฅ์ ๋ณต์
ex) git clone https://github.com/Likelion-Kwangwoon/Django1.git
- git checkout -b <๋ธ๋์น๋ช
> : branch๋ฅผ ์๋ก ๋ง๋ค๊ณ ํด๋น branch๋ก ์ด๋
- git checkout <๋ธ๋์น๋ช
> : <๋ธ๋์น๋ช
>์ผ๋ก ์ด๋
- git merge <๋ธ๋์น๋ช
> : ํ์ฌ ์๋ branch๋ก <๋ธ๋์น๋ช
>์ ๋ณํฉ
- git branch <๋ธ๋์น๋ช
> : branch ์์ฑ
- git switch <๋ธ๋์น๋ช
> : <๋ธ๋์น๋ช
>์ผ๋ก ์ด๋
- ๋ณ์ ์ ์ธ
- 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(โ์ค์น ์งํํ๊ฒ ์ต๋๊น ? โ)
์กฐ๊ฑด๋ฌธ
- If ๋ฌธ
๋ฐ๋ณต๋ฌธ
- for ๋ฌธ
- while ๋ฌธ
*์ ์ธ
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]-
[deep copy,shallow copy] (https://wikidocs.net/16038)
-
๋ฐ๋ณต๋ฌธ
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์์ ๊ฐ์ด ๋ช ๊ฐ ์๋ ์ง ์ถ๋ ฅ- ์ ์ธ
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)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().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 *ํ์ด์ฌ์๋ FileNotFoundError, ZeroDivisionError, IndexError ๋ฑ๋ฑ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด์ฅ ์์ธ๋ค์ด ์์
- ValueError: ๋ถ์ ์ ํ ๊ฐ์ ๊ฐ์ง ์ธ์๋ฅผ ๋ฐ์์ ๋ ๋ฐ์
- IndexError: ์ธ๋ฑ์ค ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ์ ๋ฐ์
- SyntaxError: ํ์ด์ฌ ๋ฌธ๋ฒ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ
- NameError: ์ง์ญ๋ณ์, ์ ์ญ ๋ณ์ ์ด๋ฆ์ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ
- ZeroDivisionError: 0์ผ๋ก ๋๋๋ ค๋ ๊ฒฝ์ฐ์ ๋ฐ์
- FileNotFoundError: ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ์ ์ ๊ทผํ๋ ค ํ ๋, ํด๋น ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ฐ์
- TypeError: ์๋ชป๋ ํ์ ์ ์ ๋ฌํ์ ๋ ๋ฐ์
- AttributeError: ํด๋์ค(๋ชจ๋)์ ๊ฐ์ฒด์ ํด๋นํ๋ ๋ฉ์๋๋ ์์ฑ์ ์๋ชป ํธ์ถํ๊ฑฐ๋ ๋์ ํ์ ๋ ๋ฐ์
- KeyError: ๋์ ๋๋ฆฌ์์ ์ ๊ทผํ๋ ค๋ ํค ๊ฐ์ด ์์ ๋ ๋ฐ์
- OverFlowError: ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ
# ์คํํ ์ฝ๋
try:
...
# ์๋ฌ๊ฐ ๋ฐ์ํ์์ ๋ ์คํํ ์ฝ๋
# ๋ฐ์ ์ค๋ฅ ์ข
๋ฅ: FileNotFoundError, ZeroDivisionError, IndexError, ...
except [๋ฐ์ ์ค๋ฅ[as ์ค๋ฅ ๋ฉ์์ง ๋ณ์]]:
...
# ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์์ ๋ ์คํํ ์ฝ๋
else:
...- 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()- ์๋ฒ๋ ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ฉด์ ๋ธ๋ผ์ฐ์ ์ ์๋ต์ ํ๋ค.
- ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ํ ๊ธฐ๋ฅ, ๊ตฌ์กฐ์ ํ์ ์ ๊ณต
- ์์คํ ํ๋ฆ์ ํ๋ ์์ํฌ๊ฐ ์ ์ดํจ
- ex) Django, Spring, Android
- ํน์ ๊ธฐ๋ฅ์ ๋ชจ์๋ ์ฝ๋, ํจ์๋ค์ ์งํฉ์ด๋ฉฐ ์ฝ๋ ์์ฑ ์ ํ์ฉ ๊ฐ๋ฅํ ๋๊ตฌ
- ์์คํ ํ๋ฆ์ ๊ฐ๋ฐ์๊ฐ ์ ์ดํจ
- ex) C++ โ STL, Python โ Tensorflow, Pandas
- ์ฑ(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
- ์ธ์ ๋ณด์
- ๋ณด์์ฌํญ ๊ธฐ๋ฅ ์ ๊ณต
- Model
- ๋ฐ์ดํฐ ๊ด๋ฆฌ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ ๋ฐ ์คํ
- Template
- ๋ฐ์ดํฐ ์ถ๋ ฅ ์ญํ
- ์ฌ์ฉ์์๊ฒ ํํ ๋ฐฉ์ ์ ์
- View
- ์ปจํธ๋กค๋ฌ ์ญํ
- ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌ
- GET
- ๋ฐ์ดํฐ๋ฅผ URL์ ์ฟผ๋ฆฌ์คํธ๋ง์ ํฌํจํ์ฌ ๋ณด๋ธ๋ค.
- ์ฃผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ์ฉ๋๋ก ์ฌ์ฉ๋๋ฉฐ, ์์ฒญ URL์ ๋ฐ์ดํฐ๊ฐ ๋ ธ์ถ๋๋ฏ๋ก ๋ณด์์ ์ทจ์ฝํ ์ ์๋ค.
- ์บ์๋ฅผ ์ด์ฉํ์ฌ ์์ฒญ์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์์ด์, ๋น๋ฒํ๊ฒ ์์ฒญ๋๋ ๋ฐ์ดํฐ์ ์ ํฉํ๋ค.
- ex) www.naver.com?id=abcdef&pass=1234
- POST
- ๋ฐ์ดํฐ๋ฅผ ์์ฒญ ๋ณธ๋ฌธ์ ๋ด์ ๋ณด๋ด๋ฉฐ, ๋ฐ์ดํฐ์ ์์ด ๋ง๊ฑฐ๋ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์ ์กํ ๋ ์ฌ์ฉ๋๋ค.
- URL์ ๋ฐ์ดํฐ๊ฐ ๋ ธ์ถ๋์ง ์์ผ๋ฏ๋ก, ๋ณด์์ฑ์ด ๋๋ค.
- ์์ฒญ๋ง๋ค ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ์ ์กํ๋ฏ๋ก, ์์ฒญ์ ๋ฐ๋ผ ๋ ๋ง์ ์์์ ์๋นํ๋ค.
- ํ๋ก์ ํธ์์ ์ฌ๋ฌ ์ฑ์ผ๋ก ๊ตฌ์ฑ ๋จ(์ฑ์ ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ๋ ๋ชจ๋์ ์๋ฏธ)
- mtv ํจํด: ์๋ฐ์ mvcํจํด๊ณผ ์ ์ฌํ๋ ์ด๋ฆ๋ง ์กฐ๊ธ ๋ณ๊ฒฝ๋ ๋๋ model- view -controller(java)==model-template-view(python)
- Model - ๋ฐ์ดํฐ ๊ด๋ฆฌ Template - ๋ฐ์ดํฐ ์ถ๋ ฅ ์ญํ View- ์ปจํธ๋กค๋ฌ ์ญํ
-
์์ฑ: 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' ํด๋ ์์ฑ
- GET- read
์๋ฒ์๊ฒ Resource๋ฅผ ๋ณด๋ด๋๋ก ์์ฒญํ๋๋ฐ ์ฌ์ฉ (์๋ฒ์ Resource๋ฅผ ์ฝ์)
- PUT- create
์๋ฒ์ ๋ฌธ์๋ฅผ ์ธ๋ ์ฌ์ฉ (GET๊ณผ ๋ฐ๋)
- POST- update
Server์ Input Data๋ฅผ ๋ณด๋ด๊ธฐ ์ํจ (HTML form์ ๋ง์ด ์ฌ์ฉ)
- DELETE- delete
์์ฒญ Resource๋ฅผ ์ญ์ ํ๋๋ก ์์ฒญ
- config - settings.py ๋ถ๋ฆฌ
- https://docs.djangoproject.com/ko/4.2/howto/deployment/
DEBUG = FalseSERCRET_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
- CentOS ์น ์๋ฒ ์์ฑ: https://itadventure.tistory.com/372
- ubuntu ์น ์๋ฒ ์์ฑ: https://king-ja.tistory.com/99
- pyenv ์ค์น: https://jinmay.github.io/2019/03/16/linux/ubuntu-install-pyenv-1/
- AWS์ gunicorn ์ฐ๊ฒฐ: https://velog.io/@han0707/AWS๋ฅผ-์ด์ฉํด-๋ฐฐํฌํ๊ธฐ








