- problem: Django 개인과제 push 후, Git에서 내가 올린 파일이 시크릿키를 포함하고 있어서 위험하다는 식의 메일을 받았다.
- try: 처음에는 급한 마음에 git에 push한 파일 속 시크릿키를 그냥 삭제해버렸다. 그랬더니 프로그램이 제대로 동작을 하지 못했다. django-dotenv 사용하여 시크릿키를 숨기고, 이미 노출된 시크릿키값도 새로 변경하는 방법을 시도했다.
# django-dotenv 사용
pip install django-dotenv
# freeze
pip freeze > requirements.txt
# settings.py; SECRET_KEY 코드를 변경
import os
SECRET_KEY = os.environ.get('SECRET_KEY')
# manage.py; dotenv불러오기
import dotenv
if __name__ == '__main__':
dotenv.read_dotenv()
main()
# 새로운 SECRET_KEY 랜덤 생성 코드 ; 터미널에서 실행
python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'
# .env에 SECRET_KEY 저장
SECRET_KEY = '~~~비밀~~~'
# .gitignore에 .env 넣기
파이참 가상환경 설정
- problem:
- try:
# 브랜치 생성
$ git branch 브랜치명
# 원하는 브랜치로 이동
$ git checkout 브랜치
# 브랜치 생성 및 이동
$ git checkout -b 브랜치명
# 브랜치 삭제
$ git branch -D 브랜치명
# 브랜치에 pull;
# 브랜치에 push
$ git log
$ git add .
$ git commit -m '메세지'
$ git push origin 브랜치명
# 브랜치 병합
$ git merge master에 병합시킬 브랜치명
🖇️브랜치 참고) https://mylko72.gitbooks.io/git/content/branch/checkout.html
- posting 앱 생성
- PostingModel 생성
class PostingModel(models.Model):
class Meta:
db_table = "my_posting"
img = "../templates/img/thumbnail.png"
# user_id = models.ForeignKey(UserModel, on_delete=models.CASCADE)
author = models.ForeignKey(UserInfo, on_delete=models.CASCADE)
title = models.CharField(max_length=256)
thumbnail = models.TextField(default=img)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
- views.py
def posting_view(request):
if request.method == 'GET':
user = request.user.is_authenticated
if user:
return render(request, 'posting/posting.html')
else:
return redirect('/api/sign-in')
elif request.method == 'POST':
posting_user = request.user
author = posting_user
title = request.POST.get('title','')
thumbnail = request.POST.get('thumbnail','')
content = request.POST.get('content','')
if title == '':
return render(request, 'posting/posting.html', {'error': '제목을 작성해주세요!'})
elif content == '':
return render(request, 'posting/posting.html', {'error': '내용을 작성해주세요!'})
else:
PostingModel.objects.create(author=author,title=title,thumbnail=thumbnail, content=content)
return redirect('/api/posting-detail')
def posting_detail_view(request,id):
if request.method == 'GET':
select_posting = PostingModel.objects.get(id=id)
return render(request, 'posting/posting_detail.html', {'select_posting': select_posting})
elif request.method == 'POST':
return redirect('/api/posting-detail/'+str(id))
- urls.py
urlpatterns = [
path('', views.home_view, name='home'), # 127.0.0.1:8000 과 views.py 폴더의 home 함수 연결
path('api/posting/', views.posting_view, name='posting'),
path('api/posting-detail/<int:id>', views.posting_detail_view, name='posting_detail'),
path('api/mypage/<str:username>', views.mypage_list_view, name='mypage'),
]