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 |