[장고기초]5주차

2022. 9. 28. 23:45스파르타코딩클럽[AI트랙 3기]/장고

5-1 이번주 배울 것

-input 보완하기 - 아무글 없어도 작성됨(글없을때 저장되는 것 방지)

-장고 태그 서비스 적용

-깃허브에 내프로젝트 올려서 관리하기

-aws 나만의 서버 만들어서 접속하기

 

5-2 서비스를 좀 더 섬세하게 1 - 회원가입/로그인

파이참 > 서버 작동중인지 확인 > 만든 주소로 들어가기 > 로그인페이지 등장 > 비밀번호 틀리면 로그인 안됨.

1)왜 로그인이 안되는지 화면에서 알려주는 기능 추가 

2)아무것도 안적고 버튼누르면 에러 

파이참 > 회원가입은 user앱 

view.py 회원가입 받는 정보는 sign_up_view 에서 보면 username,password 등 은 none으로 들어갈 수 없음. 그래서 None을 ''으로 고쳐줌. 에러가 왜나는지 알려줌. 

가)입력한 패스워드가 다를 때 

if password != password2:

return render(request, 'user/signup.html') 원래 이렇게 되어 있는데

return render(request, 'user/signup.html', {'error':'패스워드를 확인 해 주세요!'})

나)패스워드와 아이디를 입력안했을때

패스워드 같은 경우지만 아이디나 패스워드가 없을 경우 

else:

if username == '' or password == '' :

return render(request, 'user/signup.html', {'error':'사용자 이름과 비밀번호는 필수입니다!'})

다)사용자 이름이 이미 존재할 때

if exit_user:

return render(request, 'user/signup.html', {'error':'사용자가 존재합니다!'})

>이제 에러문을 전달 

templates>user>signup.html의 <hr>위에 적기

#에러메세지가 나오도록 작성

{%if error%}

<div class = "alert alert-danger" role="alert">

{{ error }}

>저장하고 서버 작동 > 회원가입에서 에러안나고 경고창이 뜸. 

2)로그인이 안될때 

sign_in_view에서 none을 ''으로 바꿔줌.

밑에 else부분에 redirect('/sign-in')부분을 수정

화면에 다시 보여주는 것은 return render(request, 'user/signin.html',{'error':'유저이름 혹은 패스워드를 확인 해 주세요.'})

>html에 적기.

{%if error%}

<div class = "alert alert-danger" role="alert">

{{ error }}

 

5-3 서비스를 좀 더 섬세하게 2 - 글쓰기/네비게이션바 수정

1)글쓰기 방지 : 내용없이 입력시 저장안되게하기

tweet앱안에 views.py

글쓰는 부분 확인 def tweet > get은 화면보여주기 . post는 저잦ㅇ하기

post에서 작업

에러를 보여주기 위해 redirect가 아니라 render를 해줌. 

user = request.user 미틍로

content = request.POST.get('my-content','')

if content == ''':

all tweet = TweetModel.objects.all().order_by('-created_at') #원래있던 데이터는 같이 볼 수 있게 해줘야함.

return render(request,'tweet/home,html',{'error':'글을 공백일 수 없습니다.','tweet':all_tweet})

else:

원래 있던 거는 return 위까지 해서 다 날리기

my_tweet = TweetModel.objects.create(author=user, content=content) 

my_tweet.save() #저장해주기

>tweet home.html가서 에러 출력해줌.

<form action="/tweet/ method="post""> #form 안에 적어줌.

{%csrf_token%}

{%if error%}

 <div class=>

{%endif%}

 

2)네비게이션 바 수정 :친구라는 거 로그인하면 보이게하기

상단바는 tweet 템플릿의 base.html안에 있음. 친구라고 적힌 글자가 있는데 이것을 수정해줌. <div class="collapse" >부분 수정 > spartaSNS부분에서 바로 밑에 {%if user.is_authenticated%}</div>와 <form> 사이에 {%endif%}

 

5-4 장고 taggit 설치

모듈 다운 받고 장고 세팅파일에 추가해주고 migration해주고 디비까지 적용.

1)장고 태그 모듈 다운 : 서버 끄기>  pip install django-taggit / pip install django-taggit-templatetags2

2)settings에 추가해주기

모듈 다운받았다면 settings에 알려줘야함. myspartasns settings.py 열어주고 다운받은 모듈 추가 

installed_apps에 'taggit.apps.TaggitAppConfig', 'taggit_templatetags2', 하고 ]  밑에 두가지 정보 입력
TAGGIT_CASE_INSENSITIVE = True

TAGGIT_LIMIT = 50

3)tweet 모델 안에 tag 넣기

사전에 태그를 넣을 수 있는 모듈 넣기 

from taggit.manager import TaggableManager #우리글에 태그 추가하도록 만들어주는 메니저

class TweetModel에 content 밑에 tags = TaggableManager(blank=True) #blank True는 비어있어도 되는 것

>하고 마이그레이션 실행

 

5-5 장고 taggit 사용하기

1)tweet앱의 views.py 열고 tweet함수 수정 #글을 쓸때 같이 입력할 거기 때문에 post에 가줌

user, content와 밑에 tag=request.POST.het('tag,''').split(',') #태그를 포스트에서 가져오는 척을 했지만 있다가 화면ㅇ르 바꿔줌. 아이디랑 네임을 태그로 갖고있는 input태그를 만들어줌. 태그들을 저장할때는 my_tweet.save()에서 해줌. 그럼 save 바로 위에

for tag in tags:

    tag = tag.strip() #strip공백을 제거하고 넣어줌 

    if tag != '' :

       my_tweet.add(tag)

tweet완료되면 아래의 클래스들을 같은 파일(tweet앱의 views.py)에 추가

제일 상단에 from django.views.generic import ListView, TemplateView

맨 밑에서 class 

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

2)url설정하기

tweet urls.py 해서 붙여넣기

3)html코드

코드스니펫 복사해서 textarea한칸밑에 작성

밑에 if문하나더있음. 내글에 태그가 있으면 태그를 보여주고 없으면 안보여준다는 if문. tw.content 바로 밑에다가 넣어줌.

tweet_detail.html에도 해줌 >tweet.content

*새로 생성해줄 부분

템플릿 아래 taggit이라는 폴더 생성. 아래에 html파일 생성. tag_with_post..html 하고 지움. tag_cloud_view.html도 만들어줌.

코드스니펫 붙여넣기 

서버 실행하고 작성된 글이 아래 보임.

 

5-6 깃허브에 나의 코드 올리기

깃허브에 소스코드 올리기전에 먼저 작업해줄 부분이 있음.

1)올리기전 나의 코드 준비

-db.sqlite3 지우기

우측버튼>delete 

-각 폴더의 migrations 폴더에 init빼고 다 지우기

왜지우냐면 정보들이 다 migration 안에 들어감. 정보가 남아있으면 db를 바꿔도 정보가 바뀌지 않음. 

-settings.py 수정하기

DEBUG = True를 False

ALLOWED_HOSTS= ["*"]

로 바꿔줌.

> 깃허브 로그인 > 레포생성 > mySpartaSns > description : 나의 sns 서비스 만들기 > 레포에 올리기

도메인 적힌 부분 바로 밑에 문단 확인

파이참에서 터미널 열기 > 윈도우는 추가설정 필요.(터미널에서 cmd를 깃배시로 변경 : 파일>세팅>터미널검색>shell path를 cmd에서 git-bash로 변경)

터미널 git init 입력 (넘기겠다)> git add . (내가갖고있는것을 추가해주겠다.) git commit -m 'first commit' 하면 파일이 올라감. > git branch -M main > git remote add origin $내주소 적기 > git push -u origin main > 새로고침하면 올라가짐. 

 

5-7 aws서버에 내 프로젝트 올리기

aws서버에 프로젝트 올리기. 깃허브에 올린 소스코드를 사용해서 서버를 구축하는 과정. aws에서  ec2생성하고 포트설정도 해보기 . 깃과 파이선 3를 설치하고 그걸 사용해서 장고 소스를 내려 받음. 그리고 nohub이라는 기능을 사용

1)aws 로그인 

2)ec2사용 컴퓨팅 ec2

가비아 연결해주면 끝

'스파르타코딩클럽[AI트랙 3기] > 장고' 카테고리의 다른 글

[장고심화]2주차  (0) 2022.10.26
[장고심화]1주차  (0) 2022.10.25
[장고기초]4주차  (0) 2022.09.28
[장고기초]3주차  (0) 2022.09.23
[장고 기초]2주차 과제  (1) 2022.09.23