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 예제이다.
# 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')
훨씬 간단하게 로직을 구현 할 수 있다.
{% 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로 요청및 응답을 받는 형식또한 같은 것 같다.
ex) 한개의글을 여러 작성자가 작성할 순 없지만, 작성자가 여러개의 글을 작성하는 건 가능하다
ex) 프로필과 같이, 나 혼자만이 작성 가능함
ex) 팔로워,팔로우 기능과 같이 서로여러개의 데이터를 가질 수 있다.
4주차까지 일단 완료를 했다. 이해가 가는 부분도 있지만 꼼꼼하게 살펴봐야할 내용들이 많은 것 같다.
API를 정확하게 주고 받아야 한다. 오류가 진짜 너무 잘난다...
오늘 테스트에서도 느꼇지만, url 과정에서 오류가 나니 시간도 너무 잡아먹고, 시간이 많이 떳던 것 같다. 이부분도 공부가 필요한 것 같다. 역시 천천히 하나씩 구현하는게 제일 좋은 습관인 것 같다.