목록파이썬/Django (17)
훈훈훈
# mysqlclient 설치 pip install mysqlclient - 가상환경에서 해당 명령어를 이용해서 mysqlclient 설치를 진행한다. # Database 생성 mysql> create database test character set utf8mb4 collate utf8mb4_general_ci; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | test | +--------------------+ 5 rows ..
# Why 인증 데코레이터 HTTP 프로토콜은 각각의 통신이 독립적이기 때문에 이전에 사용자가 인증을 했는지 알 수 없으며, 새로운 페이지로 넘어 갈떄마다 인증을 해줘야는 문제점이 있다. 이를 해결하기 위해 모든 클래스/함수에 인증 기능을 추가할 수는 있지만 코드가 복잡해지고 길어지기 때문에 인증 기능을 구현 후 데코레이터를 사용하는 것이 좋다, # 인증 데코레이터 클래스 import jwt import json from account.models import Account from mysite.settings import SECRET_KEY from django.http import JsonResponse class LoginConfirm: def __init__(self, original_functi..
장고(Django)를 이용하여 간단하게 회원가입과 로그인 기능을 구현한 API에 패스워드 암호화 및 토큰 기능을 추가해보았다. * 이전에 구현한 코드 https://wave1994.tistory.com/57 # models.py models.py 파일은 데이터베이스 테이블을 만들고 그 안의 필드들을 생성 및 수정할 수 있는 역할을 한다. from django.db import models class Account(models.Model): email = models.EmailField(max_length=100, unique=True) password = models.CharField(max_length=200) created_at = models.DateTimeField(auto_now_add=True..
# SECRET_KEY란 ? 장고(Django)에서 SECREET_KEY는 암호화 인증에 사용되는 비밀키이다. 이 값은 다른 프로젝트와는 다른 유일한 값으로 세팅되어야하며, 버전 컨트롤 시스템에서 제외되어야 한다. 만약 외부에 노출 시 보안 위협에 노출될 수 있기 떄문에 settings 파일에 저장하는 것이 아닌 외부에 따로 저장을 해야한다. 해당 키를 분리 방법으로는 환경 변수를 이용한 방법과 외부에 저장하는 방법이 있으며, 이번 장에서는 외부에 저장하는 방법을 소개하려고 한다. # secret.json 생성 { "FILENAME" : "secret.json", "SECRET_KEY" : "I'm secret !!", "DATABASES_HOST" : "127.0.0.1", "PORT" : "8080"..
# 인증(Authentication)과 인가(Authorization) - 인증 : 사용자의 신원을 확인하는 절차이며, 사용자 ID 와 Password를 받아서 등록된 사용자가 맞는지 검증하는 과정이다 - 인가 : 인증이 로그인 과정이라면 인가는 로그인 후 사용자에게 권한을 부여하는 과정이다. # API Token - 인증 방법의 한 종류, API Token을 발급하여 사용자 인증 - 장점 : API Token 탈취 시 탈취자는 API를 호출할 수는 있지만 ID/Password 는 알 수 없어 2차 피해 예방 가능 네트워크로 ID/Password 전송 시 공격자로부터 탈취당할 수 있음 - 발급 절차 : 사용자 인증(ID/Password) -> API Token 발급 -> API Token으로 사용자 인증..
Django(장고)를 이용해 회원가입과 로그인 기능을 가진 API를 구현해보았다. # 디렉터리 구조 아래 명령어를 사용하여 프로젝트(mysite)와 앱(account)을 생성하였다. > django-admin startproject mysite . > python manage.py startapp account # models.py from django.db import models class Account(models.Model): name = models.CharField(max_length = 50) password = models.CharField(max_length= 200) created_at = models.DateTimeField(auto_now_add=True) updated_at = m..
# 쿼리셋(QuerySet) ?? QuerySet 이란 데이터베이스에서 전달 받은 객체의 목록이다. (Django ORM에서 발생한 자료형) 리스트와 구조는 같지만 파이썬 기본 자료구조가 아니기 때문에 파이썬에서 읽고 쓰기 위해 자료형 변환(Casting)을 해줘야한다. 이제 아래와 같은 코드로 확인해보자. 위 코드는 request 요청으로 "name" 과 "password"를 전달받아 Json 형태로 반환해주는 코드이다. 필요한 모듈들은 Import 한 후 파이썬 쉘에서 확인해보자. ($ python manage.py shell) 현재 데이터베이스에 쌓인 값이 없기 때문에 [모델클래스].objects.create( )에 임의의 값을 저장하였다. 값을 저장 후 [모델클래스].objects.all( )와 ..
# 프로젝트와 애플리케이션 - 프로젝트 웹 사이트에 대한 전체 프로그램을 프로젝트(Project)라고 한다, - 애플리케이션 모듈화된 단위 프로그램을 애플리케이션이라고 한다. 즉, 애플리케이션 프로그램들이 모여 프로젝트를 구성하는 개념 # MVT 패턴 MVT 각 기능을 구분해서 한 요소가 다른 요소들에 영향을 주지 않도록 설계하는 방식이다. (MVC 패턴과 동일) - Model : 데이터베이스에 저장되는 데이터를 의미 - VIew : 실질적으로 프로그램 로직이 동작하여 데이터를 가져오고 처리한 결과를 Templete에 전달 - Template : 사용자에서 보여지는 UI 부분 일반적으로 REST API 를 생성할때는 Model과 View 영역만 작성한다. ** Client의 요청을 받고, Django에서..