0928 TIL

looggi·2022년 9월 28일
2

스파르타 내배캠 AI-3

목록 보기
25/130
post-thumbnail

🌞 쪽지시험

  1. 프로젝트에 사용될 폴더를 생성하고, 편집기(vscode, pycharm..)에서 생성한 폴더를 열어주세요.
    mkdir sparta_django_test
  2. 파이썬 가상 환경을 생성하고 활성화해주세요.
    python3 -m venv myvenv
    ls (현재 경로에 있는 파일 리스트를 보여준다-> 여기에 venv가 있어야 가상환경 활성화(아래 코드) 가능)
    source myvenv/bin/activate
    (<->deactivate)
  3. Django 패키지를 설치해주세요.
    pip install django
    pip freeze
    pip list
  4. spartatest라는 django 프로젝트를 생성해주세요
    django-admin startproject spartatest
  5. customuser라는 앱을 생성해주세요
    django-admin startapp customuser
  6. settings.py에 앱을 등록해주세요.
  7. Django의 User를 기반으로 만든 CustomModel라는 클래스를 만들어주세요.
    조건: 테이블 이름은 custom_user
    Django의 User 모델에서 아래의 필드를 추가해주세요.
    - address (TextField, max_length=500, blank=True)
    - bio (TextField, max_length=500, blank=True)
    힌트: class CustomModel(AbstractUser)
  8. Django에게 기본 인증과정 (AUTH_USER_MODEL)을 customuser 앱에 작성한 CustomModel로 사용하겠다! 라고 알려주세요.
    힌트: settings.py
  9. 데이터베이스에 변경사항을 반영하고 적용해주세요.
    python3 manage.py makemigrations
    -> migration 폴더 생성, db 변경사항 체크, 파일로 db table 생성
    -> 원래 처음 만들 땐 필요 없는데 이번엔 장고에서 원래 제공하는 auth_user모델에 수정(내가 만든 CustomModel추가) 사항이 있어서 해줘야함
    python3 manage.py migrate
    -> migrations 내용을 db에 저장
  10. 관리자 계정을 만들어주세요.
    python3 manage.py createsuperuser
  11. Admin 사이트에서 CustomModel를 볼 수 있도록 적용해주세요.
    user/admin.py
    admin.site.register(CustomModels)
  12. 서버를 켜고 CustomModels에서 아래와 같이 address와 bio를 볼 수 있다면 성공입니다.
    python3 manage.py runserver

👽 깃 터미널 복습하기

https://guides.codepath.com/ios/Using-Git-with-Terminal

깃 사용해서 브랜치 만들고 푸쉬해보기( a7)

  1. 깃을 사용하고 싶은 폴더 안으로 들어가서(cd) git init
  2. 폴더 안에 깃폴더 생성된거 확인하기> command+shift+. 또는 터미널에서 ls
  3. 원격-로컬 저장소 연결하기> git remote add origin (브랜치 이름) https://github.com/1TEAM12/insta_clone.git (원격리포 주소)
  4. git branch -M main
  5. git pull origin main -f(강제)
  6. 새로운 브랜치(hy)생성> git branch hy
  7. 새로운 브랜치로 이동> git switch hy (=checkout hy)
    -> 새로운 브랜치 생성하고 체크아웃하기> git checkout -b hy
  8. 새로운 브랜치 생성 확인/ 현재 브랜치 확인> git branch
    -> 원격 브랜치 확인> git branch -r 로컬, 원격 브랜치 모두 확인> git branch -a
  9. 새로운 파일 만들기> touch a.txt(만들기만) 또는 vi a.txt(없으면 자동으로 만들어짐)
  10. 로컬에서 파일 스테이징하기>git add a.txt
  11. 로컬에서 파일 커밋하기>git commit a.txt(내용까지 작성)/git commit -m "간략한 커밋내용"
    -> 추적가능한 모든 파일의 변경사항 커밋하기> git commit -m "커밋내용"
  12. 메인 브랜치로 머지하기> git checkout main 후 git merge hy
  13. 원격리포 변경내역 가져오기> git pull/git pull origin main
  14. 원격리포로 로컬리포 변경내역 푸쉬하기> git push origin main
  • git version> 깃 버전 확인(branch가 main이 되려면 v2.28 이상)
  • 깃 업데이트>

$ sudo add-apt-repository ppa:git-core/ppa -y
$ sudo apt-get update
$ sudo apt-get install git -y

  • password authentication 오류>

Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.

-> 터미널에서 원격리포로 푸쉬를하는데 로그인을 했더니 계속 오류가 났다
패스워드 인증방식이 아니라 토큰/ssh을 만들어서 인증하면 더이상 경고창이 뜨지 않는다!

토큰 발급받는 방법:
github settings -> developer settings -> personal access tokens -> generate new token -> repo, admin:repo_hook, gist, user, delete_repo 체크 ✅ -> ⭐️토큰 복사(다시 못봄!)⭐️

  • 터미널 히스토리는 history로 볼 수 있다

참고) https://medium.com/@joongwon/git-git-명령어-정리-c25b421ecdbd


🦊 장고기초 5주차 끝~~~!!!!!!

🌵 글쓰기 부분 수정(tweet)

  1. 작성한 내용이 없어도 저장됨-> 작성한 내용이 있어야 저장가능
  • tweet/views.py
# tweet/views.py

@login_required # 로그인하지 않으면 접근할 수 없음
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', '') #글 작성이 되지 않았다면 빈칸으로

        if content == '': # 글이 빈칸이면 기존 tweet과 에러를 같이 출력
            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) # 글 저장을 한번에!
	        my_tweet.save()
	        return redirect('/tweet')
  • tweet/home.html
<form action="/tweet/" method="post">
  {% csrf_token %}
  {% if error %}
      <div class="alert alert-danger" role="alert">
          {{ error }}
      </div>
  {% endif %}
  1. 네비게이션 바의 <친구> 탭이 로그인하지 않았을 때는 보이지 않도록하기
  • base.html
{% if  user.is_authenticated %}
<div class="collapse navbar-collapse" id="navbarSupportedContent">
    <ul class="navbar-nav mr-auto">
        <li class="nav-item">
            <a class="nav-link" href="/user"> 친구 <span class="sr-only"></span></a>
        </li>
    </ul>
</div>
{% endif %}

-> 네비게이션 바의 <친구> 부분을 로그인한 경우로 감싸줌

🌵 django taggit

  • 태그 모듈 설치

pip install django-taggit
pip install django-taggit-templatetags2
(preference에서 인터프리터로도 설치가능)

  • settings.py에서 수정해주기
    -> installed_apps에 추가

TAGGIT_CASE_INSENSITIVE = True
TAGGIT_LIMIT = 50

  • tweet/models.py
from taggit.managers import TaggableManager

class TweetModel(models.Model):
			...
 tags = TaggableManager(blank=True)

-> (blank=True)는 비어있어도 작동하겠단 뜻
-> 모델이 변경되어서 makemigrations/migrate 해서 db에 반영시켜줌

  • tweet/views.py
elif request.method == 'POST':
			...
	 tags = request.POST.get('tag', '').split(',')
     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() 
     

-> post방식일 때 받는 변수가 추가되었으므로(tags) html에서 받아와야함
-> tweet/home.html 수정

  • 장고 도큐먼트에서 권장하는 양식 추가
# 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
# tweet/urls.py(url추가)
path('tag/', views.TagCloudTV.as_view(), name='tag_cloud'),
path('tag/<str:tag>/', views.TaggedObjectLV.as_view(), name='tagged_object_list'),
  • templates/taggit/tag_cloud_view.html, tag_with_post.html 추가

🌵 GitHub 올리기

  • 사전작업: sqlite삭제/ migrations 폴더 init.py 빼고 삭제/ myspartasns/settings.py 수정
  • github) create new repository
  • github에 내 프로젝트 올리기(cli)

git init (깃과 연동하는 폴더로 만들기)
git add . (이 경로에 있는 파일 다 올림)
git commit -m '커밋내용'
git branch -M main
git remote add origin https://github.com/hyojine/mySpartaSNS.git
git push -u origin main

🌵 aws 서버 등록하고(ec2 ip주소생성), gabia 도메인 등록하기(선택)


😎 인스타 클론코딩 유튜브 보기

profile
looooggi

0개의 댓글