장고 기초강의 마무리

김하진·2022년 5월 30일
0

오늘은 기초강의를 완강을 하였다.

기초 프로젝트 세팅부터 배포까지 오늘까지 쭉 진행을 해보았다. 우선 5주차내용을 간략히 보면

기존에 만들었던, 구현기능에대한 좀더 세심한 작업들이다

빈칸을 작성하면 오류를 보내준다던지, 좀더 완성도 있는 사이트를 만들기 위한 작업들이다

 username = request.POST.get('username', None)
        password = request.POST.get('password', None)
        password2 = request.POST.get('password2', None)
        bio = request.POST.get('bio', None)

이렇게 None 으로 되어있따면 오류페이지로 넘어가 버린다.

 username = request.POST.get('username', '')
        password = request.POST.get('password', '')
        password2 = request.POST.get('password2', '')
        bio = request.POST.get('bio', '')

이렇게 '' 으로 바꾸어 주고 ''을 처리하는 로직을 짜면 된다

 if username == '' or password == '':
                # 사용자 저장을 위한 username과 password가 필수라는 것을 얘기 해 줍니다.
                return render(request, 'user/signup.html', {'error': '사용자 이름과 패스워드는 필수 값 입니다'})

이런식으로 작업을 하면 된다.

{% if error %}
    <div class="alert alert-danger" role="alert">
        {{ error }}
    </div>
{% endif %}

error 가 나왔을때만 jinja2 문법을 이용해서 html에 그려준다

DJANGO 태그 기능 이용하기

pip install django-taggit
pip install django-taggit-templatetags2

pip install 해주고

setting.py 에

TAGGIT_CASE_INSENSITIVE = True
TAGGIT_LIMIT = 50

을 추가 해준다!

model.ps 에
from taggit.managers import TaggableManager
을 추가 해주고

tags = TaggableManager(blank=True)
기존 클래스안에 tags 를 넣어준다

python manage.py makemigrations
python manage.py migrate

터미널에 바뀐 DB에 대해서 추가 해주면 된다!

def tweet(request):
    if request.method == 'GET':  # 요청하는 방식이 GET 방식인지 확인하기
        all_tweet = TweetModel.objects.all().order_by('-created_at')
        return render(request, 'tweet/home.html', {'tweet': all_tweet})
    elif request.method == 'POST':  # 요청 방식이 POST 일때
        user = request.user  # 현재 로그인 한 사용자를 불러오기
        content = request.POST.get('my-content', '')
        tags = request.POST.get('tag', '').split(',')
        if content == '':
            all_tweet = TweetModel.objects.all().order_by('-created_at')
            return render(request, 'tweet/home.html', {'error': '글은 공백일 수 없습니다', 'tweet': all_tweet})
        else:
            my_tweet = TweetModel.objects.create(author=user, content=content)
            for tag in tags:
                tag = tag.strip()
                if tag != '': # 태그를 작성하지 않았을 경우에 저장하지 않기 위해서
                    my_tweet.tags.add(tag)
            my_tweet.save()
            return redirect('/tweet')

views.py 를 다시 수정해준다

from django.views.generic import ListView, TemplateView


class TagCloudTV(TemplateView):
    template_name = 'taggit/tag_cloud_view.html'


class TaggedObjectLV(ListView):
    template_name = 'taggit/tag_with_post.html'
    model = TweetModel

    def get_queryset(self):
        return TweetModel.objects.filter(tags__name=self.kwargs.get('tag'))

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['tagname'] = self.kwargs['tag']
        return context

위 내용도 추가해준다.

위 클래스의 형식은 django공식문서에서 그대로 사용하라고 나와있는 소스코드라 그대로 사용하는 것이 좋다고는 한다
그래도 위에 소스코드를 쓸때는 꼭 이해하고 쓰자. 그냥 코드만 복붙해서 쓰는것이 아닌..

AWS 배포

웹개발종합반 강의에 이어서 2번째 배포를 진행 해보았다. 웹개발종합반에서는 에러가 하나도 안났었는데 이번
장고에서는 오류가 생각보다 너무나도 많이 나서 좀 애를 먹었던 것 같다.

git 에서 클론을 받고 실행하는데 계속해서 오류가 난다.

강의에서는 DEBUG = True 를 Flase로 바꿧지만 Ture로 그대로 바꿔줘야 하고 또한
templates 경로 또한 변경을 해줘야 했다.

'DIRS': ['templates'],

sudo apt-get install python3-pip -y

pip3 install django django-taggit django-taggit-templatetags2

python3 manage.py makemigrations

python3 manage.py migrate

pip설치와 db를 날리고 git 클론을 해줘서 초기실행시 db를 업데이트를 해주고 실행 해줘야 한다. 그냥 실행하면 오류난다.

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8000
포트 번호 없애기!

서버가 안꺼지게 계속해서 열어놀라면
nohup python3 manage.py runserver 0.0.0.0:8000 &

nohup으로 서버를 실행해야 한다!

ps -ef | grep -i 'manage.py runserver'
kill 20212
을 통해서 서버를 다시 죽일 수 있다.

개발의 목표가 배포라서 그런가, 확실히 배포하는 과정이 제일 재밌고 머릿속에 기억이 잘 남는 것 같다. 이제 내일은 지금까지 배운 django 강의를 목습하고 그동안 못했던 기초공부를 조금더 해볼 생각이다.

profile
진킴

0개의 댓글