[Django REST Framework] Section 2

GreenBeanยท2021๋…„ 9์›” 25์ผ
0
post-thumbnail

DRF

Udemy์˜ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ

Udemy
the Complete Guide to Django REST Framework and Vue JS


Section 2. Build Your First REST API with Django

Q1. requests.get()

payload = {"base": "USD", "symbols": "SEK"}
response = requests.get("https://api.exchangeratesapi.io/latest",
			params=payload)
  • Answer

Q2. if __name__ == "__main__":

def main():
    response = requests.get("http://www.google.com")
    print("Status Code: ", response.status_code)
    print("Content: ", response.text)

if __name__ == "__main__":
    main()
  • Answer

Tip! ๋ชจ๋“ˆ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•
1. ์ง์ ‘ ์‹คํ–‰
2. ์ž„ํฌํŠธ

__name__ == "__main__์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์—์„œ ์ง์ ‘ ์‹คํ–‰ํ–ˆ์„ ๊ฒฝ์šฐ์—๋งŒ if๋ฌธ ๋‚ด์˜ ์ฝ”๋“œ๋ฅผ ๋Œ๋ฆฌ๋ผ๋Š” ๋ช…๋ น

Tip! __name__
์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์‹คํ–‰ ์ „์— ๋งŒ๋“ค์–ด ๋‘” ๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜


Q3-1. View + Template

class ProductListView(ListView):
    model = Product
    template_name = "products/product_list.html"

Q3-2. .as_view()

urlpatterns = [
    path("products/", ProductListView.as_view(), name="product_list"),
]
  • Answer

.as_view()๋Š” ์ง„์ž… ๋ฉ”์„œ๋“œ๋กœ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋Š” dispatch() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•จ

dispatch()๋Š” GET, POST ๋“ฑ HTTP Method๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ•ด๋‹น ์ธ์Šคํ„ด์Šค ๋‚ด์˜ get, post๋“ฑ ๋ฉ”์„œ๋“œ๋กœ ์ค‘๊ณ„๋ฅผ ํ•˜๋ฉฐ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ HttpResponseNotAllowed ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ ์‹œํ‚ด

.as_view()์˜ ์ธ์ž๋กœ ์ „ํ•ด์ง€๋Š” ๊ฒƒ์€ ํ•ด๋‹น View์— ์ „๋‹ฌ๋  ์ธ์ž๊ฐ€ ๋˜๋ฏ€๋กœ View ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด ์ธ์ž๋กœ ๋„˜๊ฒจ์ค˜์•ผ ํ•จ

Tip! View ์ข…๋ฅ˜

  • ํ•จ์ˆ˜ํ˜• View
    • ์‹ ์†ํ•œ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋กœ์ง์ด ๋ณต์žกํ•ด์ง
    • if request.method=='GET'๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์„ ๋‹ฌ๊ณ  ๋กœ์ง ๊ตฌ์„ฑ
  • ํด๋ž˜์Šคํ˜• View
    • ์ƒ์†๊ณผ ๋ฏน์Šค์ธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์ด ์šฉ์ด
    • ๋ทฐ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ์Œ
    • ์ œ๋„ค๋ฆญ View ์—ญ์‹œ ํด๋ž˜์Šคํ˜• View
    • urls.py์— .as_view() ๋ฉ”์„œ๋“œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ
# ํ•จ์ˆ˜ํ˜• View
def my_view(request):
    if request.method == 'GET' :
        # ๋กœ์ง์ž‘์„ฑ
        return HttpResponse('result')
        
    if request.method == 'POST' :
    	# ๋กœ์ง์ž‘์„ฑ
        return HttpResponse('result')


# ํด๋ž˜์Šคํ˜• View
class MyView(View):
    def get(self, request):
        # ๋กœ์ง์ž‘์„ฑ
        return HttpResponse('result')
    
    def post(self, request):
        # ๋กœ์ง์ž‘์„ฑ
        return HttpResponse('result')
    
    def head(self, *args, **kwargs):
        # ๋กœ์ง๊ตฌํ˜„
        return HttpResponse('')

Tip! ์ œ๋„ค๋ฆญ View
Django์—์„œ ์ž์ฃผ ์“ฐ๋Š” View๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ์ œ๊ณต
ํด๋ž˜์Šค ํ˜•์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

View : ๊ฐ€์žฅ ๊ธฐ๋ณธ ์ตœ์ƒ์œ„ ์ œ๋„ค๋ฆญ View, ๋ชจ๋“  ์ œ๋„ค๋ฆญ View์˜ ์ตœ์ƒ์œ„
TemplateView : urls.py์— ๋”ฐ๋ผ ํ…œํ”Œ๋ฆฟ์ด ์ฃผ์–ด์ง€๋ฉด ๋ Œ๋”๋ง
RedirectView : url์ด ์ฃผ์–ด์ง€๋ฉด ํ•ด๋‹น url๋กœ ์ด๋™์‹œ์ผœ์คŒ
ListView : ์กฐ๊ฑด์— ๋งž๋Š” ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋ฅผ ๋ณด์—ฌ์คŒ
DetailView : ๊ฐ์ฒด ํ•˜๋‚˜์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์คŒ
FormView : ํผ์ด ์ฃผ์–ด์ง€๋ฉด ํ•ด๋‹น ํผ์„ ๋ณด์—ฌ์คŒ
CreateView : ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํผ์„ ๋ณด์—ฌ์คŒ
UpdateView : ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ํผ์„ ๋ณด์—ฌ์คŒ
DeleteView : ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•˜๋Š” ํผ์„ ๋ณด์—ฌ์คŒ
DateDetailView : ํŠน์ • ๊ฐ์ฒด ํ•˜๋‚˜์— ๋Œ€ํ•œ ์ƒ์„ธ ์ •๋ณด ๋ณด์—ฌ์คŒ
ArchiveIndexView : ์กฐ๊ฑด์— ๋งž๋Š” ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋“ค์— ๋Œ€ํ•œ ๋‚ ์งœ ์ •๋ณด ๋ณด์—ฌ์คŒ
YearArchiveView : ์—ฐ๋„์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ์ฒด๋“ค ๋ณด์—ฌ์คŒ

profile
๐ŸŒฑ Backend-Dev | hwaya2828@gmail.com

0๊ฐœ์˜ ๋Œ“๊ธ€