웹찢남

Django 1일차 (Mysql연동,CBV,login) 본문

BACK_END/Django 공부

Django 1일차 (Mysql연동,CBV,login)

harry595 2020. 8. 10. 20:45

이번에 소프트웨어 개발보안 경진대회에 본선 진출을 하게 되었다.

이번 대회의 취지가 시큐어 코딩에다가 python/java 둘 중 1 선택이어서

스터디를 진행중인 Django를 사용하기로 했다.

지난 4일 동안 장고에 대한 기초적인 공부를 해본 후 

앞으로 남은 10일동안 1일 1포스팅을 해서 총 10개의 게시물을 올릴 예정이다.

 

 

Django mysql 연동

 

먼저 아래의 명령어를 cmd에 쳐서 mysqlclient를 받자

$ pip install mysqlclient

 

그 후 settings.py에 pymysql을 import 한다.

이때 version_info를 강제로 선언을 했는데

필자의 경우에는 마지막의 코드인 pymysql.install_as_MySQLdb()에서

에러가 낫다.. 버전이 낮다는 이유여서 두번째 줄과 같이 코드를 추가하여 해결했다.

에러가 안나면 두번째 줄을 빼고 그냥 해도 된다.

 

 

 

다음으로는 마찬가지로 settings.py의 databases를 수정한다.

기존에 sqlite가 default인데 아래와같이 수정하여 mysql로 default를 수정한다.

 

 

마지막으로 migrate를 하여 db에 table들이 생기는 지 확인하면 된다.

물론 sqlite로 superuser을 생성하는 등 과 같이 기초적인 셋팅은 다시 해야한다.

또한 mysql을 쓴다고 해도 db 제어 방식은 변하지 않는다.

 

 

Django Class Based View

 

필자의 경우 views.py에 있는 코드들을 def를 사용해서 코드를 짰었다.

하지만 class를 사용하면 다양한 장점을 얻을 수 있다.

예를 들어 get 이나 post같은 방식을 구분할때

def의 경우 if(post) elif(get) 같은 방식으로 해야하는 단점이 있다.

 

하지만 class based view같은 경우 if를 method로 대체하여

훨씬 가독성이 좋을 뿐만 아니라 객체지향의 여러 장점들 또한 얻을 수 있다.

 

CBV의 경우 기본적으로 아래와 같이 기능명+View의 format으로 작성을 하며

parameter는 VIEW를 받는다. 또한 각각의 함수들은

request를 arg로 받아 response를 반환한다.

 

 

 

 

 

Django login

 

Django의 경우 LOGIN이 굉장히 용이하다.

다른 언어는 힘들게 form도 다 작성하고 DB에 집어 넣고

로그인하면 redirect하고 그래야하는데 django는 기본적으로 다 제공한다.

실무에서도 이 기능으로 로그인을 구현하는지는 모르겠지만 

일단은 Django에서는 굉장히 다양한 기능을 제공한다는 장점을 보여주는 예라고 생각한다.

 

login을 만드는 방법은 간단하다.

view.py나 템플릿을 따로 만들 필요 없이 그냥 urls.py의 url pattern에 

아래의 코드를 추가하면 login page를 생성한다.

 

 

submit과 reset 버튼까지 깔끔하게 만들어 준다. WOW

물론 세션 관리까지 제공해 준다.

이때 login은 기본적으로 superuser로 로그인을 할 수 있는데

이는 기본적으로 만들어진 USERS라는 db에 저장되어 있는 

데이터를 기반으로 동작한다는 것을 알 수 있다.

 

여기에 또 좋은 기능을 제공하는 것을 알 수 있다.

사용자 인증 여부까지 코드 한줄을 통해 제어할 수 있다.

예를 들어 로그인을 하지않은 user의 경우 해당 페이지에서 리다이렉트를 건다거나

페이지에 대해 접근을 제어하는 등의 기능이 제공된다.

 

두가지 방법을 알아봤는데 우선 데코레이터다.

이 기능은 우선 CBV 방식에서는 사용할 수 없는 것으로 알고있다.

 

 

 

def위에 @login_required를 사용하면 된다. 아래는 로그인을 한 상태에서의 페이지다.

 

 

 

그 후 cookie 내의 sid를 지우고 새로고침을 해봤다.

아래와 같이 리다이렉팅이 되는 것을 볼 수 있다.

 

 

마지막으로 redirect하는 곳을 변경할 수도 있다.

이 또한 아주 간단하다. 기존에 있던 settings.py 아무 곳에 다음과 같이 코드를 추가하여 

개발자의 입맛에 맞게 수정하면 된다.

 

 

 

 

내일부터는 간단한 게시판을 한번 만들어볼 예정이다.

Comments