Django

Django Tip

한장원1 2022. 2. 20. 01:21

라우팅

사용자가 접속한 각각의 경로를 누가 처리할 것인가를 지정하는 것

장고에서는 project 폴더 안에 있는 urls.py 가 가장 큰 틀의 라우팅이고 그리고 적당한 app으로 위임을 해주면 그 app이 view안에 있는 특정 함수로 위임을 해서 그 함수가 이 작업을 처리한다.

 

 

csrf token

{% csrf_token %}

데이터를 post 방식으로 보낼 때 보안을 위한 기능

 

 

session

사용자 정보를 저장하는 공간

 

 

AbstractUser

project/user/models.py 안에

from django.contrib.auth.models import AbstractUser -> 장고에서 제공하는 기본 유저 모델을 사용할 것이다.

class UserModel(AbstractUser):

      class Meta:

             db_table = "my_user"

     bio = models.CharField(max_length=256, default='')

-> 장고에서 제공하는 기본유저 모델을 사용하고 그 모델에서 bio를 추가한다.

 

그리고  project/settings.py 맨 밑에 AUTH_USER_MODEL = 'user.UserModel' 을 추가해줘야 한다.

 

 

AUTH_USER_MODEL

project/settings.py 안에 AUTH_USER_MODEL = 'user.UserModel' 을 넣는다는 의미는

user앱 안에 있는 UserModel 클래스를 넣어주고 기본적인 장고의 사용자 모델을 바꾸겠다는 의미

 

 

get_user_model

-> 사용자가 데이터베이스 안에 있는지 검사하는 함수

 

from django.contrib.auth import get_user_model

 

exist_user = get_user_model().objects.fillter(username=username)

 

 

Create User

new_user = UserModel()

            new_user.username = username

            new_user.password = password

            new_user.bio = bio

            new_user.save()

 

위 코드를 한 줄로 바꾸면

UserModel.objects.create_user(username=username, password=password, bio=bio)

 

 

auth

auth.authenticate(request, username=username, password=password)

-> 이 함수는 암호화된 비밀번호와 현재 입력된 비밀번호가 일치 하는지, 그게 사용자와 맞는지까지 한 번에 확인 시켜준다.

 

 

Logout

auth.logout(request) -> 로그아웃 기능

 

 

Login

from django.contrib.auth.decorators import login_required

@login_required

-> 사용자가 로그인이 꼭 되어 있어야만 접근이 가능한 함수라는 뜻

 

user = request.user.is_authenticated -> 로그인된 사용자를 확인

 

user = request.user -> 지금 로그인 되어있는 사용자의 정보 전체를 들고 오게 된다.

 

 

timesince

-> 몇분 전에 작성된 글을 표시해 줌

ex) {{ tw.created_at|timesince }}

 

 

Exclude

-> 해당하는 데이터에서 어떤 것을 빼겠다는 의미

 

ex) user_list = UserModel.objects.all().exclude(username=request.user.username)

-> 친구 리스트, 사용자 리스트를 보는데 굳이 내가 나를 볼 필요는 없기 때문에 로그인한 유저는 빼준다.

 

 

{% url  "" %}

django 에서는 html에 url로 넘어가는 태그를 쓸 때 {% url "" %} 태그형태를 사용한다.

 

ex)

<a href="{% url 'signin' %}">로그인</a>

urls.py 안에 name은 위 태그 url이름과 같아야 한다. 또한 redirect 할 때도 url 이름이 쓰인다.

 

 

Admin 페이지에 object 이름 보이기

모델 작성할 때 마지막에

def __str__(self):

      return self.title

위 코드를 넣어주면 admin 페이지에 title이 보여지게 된다.

 

ex) admin page

Article object(1) -> title