장고 기초강의 3~4주차

김하진·2022년 5월 27일
0

Class 훌어 보기

class A:
	def 기능_A_1:
		return '기능_A_1'
	def 기능_A_2:
		return '기능_A_2'

class B:
	def 기능_B_1:
		return '기능_B_1'

class 의간단한 예제이다. 이제 객체지향을 많이 접하게 될텐데 class의 개념이 굉장히 중요하고, 꼭 알고 가야할 개념들이다

class Calculator:
    def __init__(self):
        self.result = 0

    def add(self, num):
        self.result += num
        return self.result

cal1 = Calculator()
cal2 = Calculator()

print(cal1.add(3))
print(cal1.add(4))
print(cal2.add(3))
print(cal2.add(7))

개념으로 많이 쓰이는 class 예제이다.

django의 사용자 모델 적용하기

# Create your models here.
class UserModel(AbstractUser):

    class Meta:
        db_table = "my_user" # 여기는 테이블 이름이에요! 꼭 기억 해 주세요!

django가 제공하는 모델을 적용시켰다.

AUTH_USER_MODEL = 'user.UserModel'

seetings.py 에 추가 해주어야한다 !!

from django.contrib import auth # 사용자 auth 기능

views.py 에 import 해주고

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

를 넣어주면 사용자를 불러올 수 있다.
장고에서 제공하는 기능 중, 방금 추가 해 준 from django.contrib import auth 를 사용하면 위처럼 비밀번호까지 체크를 해 주고, 로그인 기능까지 간단하게 해결이 가능합니다

if me is not None:  # 저장된 사용자의 패스워드와 입력받은 패스워드 비교
            auth.login(request, me)
            return HttpResponse("로그인 성공")
        else:
            return redirect('/sign-in')  # 로그인 실패
    elif request.method == 'GET':
        return render(request, 'user/signin.html')

훨씬 간단하게 로직을 구현 할 수 있다.

tempalte 언어

{% if not user.is_authenticated %}
        <ul class="navbar-nav mr-auto">
            <li class="nav-item active">
                <a class="nav-link" href="/sign-in"> Sign In <span class="sr-only"></span></a>
            </li>
            <li class="nav-item active">
                <a class="nav-link" href="/sign-up"> Sign Up <span class="sr-only"></span></a>
            </li>
        </ul>
    {% else %}
        {{ user.username }} 님 반갑습니다!
    {% endif %}

template 언어에 좀 더 알아 보았다.

템플릿 언어란 파이썬 변수 및 문법을 html 안에서 쓸 수 있도록
장고에서 제공해주는 언어입니다.

좀 더 자세한 내용은 https://ssungkang.tistory.com/49

게시물 기능들

def tweet(request):
    if request.method == 'GET':  # 요청하는 방식이 GET 방식인지 확인하기
        user = request.user.is_authenticated  # 사용자가 로그인이 되어 있는지 확인하기
        if user:  # 로그인 한 사용자라면
            all_tweet = TweetModel.objects.all().order_by('-created_at')
            return render(request, 'tweet/home.html', {'tweet': all_tweet})
        else:  # 로그인이 되어 있지 않다면
            return redirect('/sign-in')
    elif request.method == 'POST':  # 요청 방식이 POST 일때
        user = request.user  # 현재 로그인 한 사용자를 불러오기
        my_tweet = TweetModel()  # 글쓰기 모델 가져오기
        my_tweet.author = user  # 모델에 사용자 저장
        my_tweet.content = request.POST.get('my-content', '')  # 모델에 글 저장
        my_tweet.save()
        return redirect('/tweet')

all_tweet = TweetModel.objects.all().order_by('-created_at')
-> 최신순으로 자동으로 불러온다.
return render(request, 'tweet/home.html', {'tweet': all_tweet})
-> 처음보는 형식이지만, tweet/home.html을 화면에 띄우면서 {'tweet':all_tweet} 라는 데이터를 화면에 전달한다고 한다

flask 에서 app.py 에서 html로 넘겨줄때 많이 사용한 방식과 똑같다 !

# tweet/views.py
from django.contrib.auth.decorators import login_required


@login_required
def delete_tweet(request, id):
    my_tweet = TweetModel.objects.get(id=id)
    my_tweet.delete()
    return redirect('/tweet')

게시글 삭제

  • 확실히 장고는 flaks 에 비해 정말 쉽게 구현이 가능 한 것 같다. 코드도 그렇고 뭔가 더 편하게 사용할 수 있는 느낌을 많이 받았다.

  • 또한 flaks와 마찬가지로 api 통신, GET,POST요청을 확실하게 나누고, 정확한 URL로 요청및 응답을 받는 형식또한 같은 것 같다.

데이터베이스 관계

  1. one-to-many

ex) 한개의글을 여러 작성자가 작성할 순 없지만, 작성자가 여러개의 글을 작성하는 건 가능하다

  1. one-to-one

ex) 프로필과 같이, 나 혼자만이 작성 가능함

  1. many-to-many

ex) 팔로워,팔로우 기능과 같이 서로여러개의 데이터를 가질 수 있다.

  • 4주차까지 일단 완료를 했다. 이해가 가는 부분도 있지만 꼼꼼하게 살펴봐야할 내용들이 많은 것 같다.

  • API를 정확하게 주고 받아야 한다. 오류가 진짜 너무 잘난다...

  • 오늘 테스트에서도 느꼇지만, url 과정에서 오류가 나니 시간도 너무 잡아먹고, 시간이 많이 떳던 것 같다. 이부분도 공부가 필요한 것 같다. 역시 천천히 하나씩 구현하는게 제일 좋은 습관인 것 같다.

profile
진킴

0개의 댓글