A ship in harbor is safe, but that is not what ships are built for.

개발일지/AI 캠프

내일배움캠프 AI - 20일차 TIL, 2022.09.27

플리피나리 2022. 9. 28. 02:59
반응형

스파르타 코딩클럽 내일배움캠프 AI 웹개발자양성과정 3회차

2022.09.27. 20일차 - TIL

 

 

1. Django 타임어택

  • 파이참의 프로젝트 자동 생성 기능없이 명령어로만 장고 프로젝트 만들기
  • 프로젝트에 사용할 폴더를 생성하고, 편집기(vscode or pycharm)에서 폴더 열기
  • 파이썬 가상 환경을 생성하기
    python -m venv venv
  • 파이썬 가상 환경을 활성화하기(windows)
    venv\scripts\activate
    deactivate(비활성화 명령어)
  • django 패키지 설치하기
    pip install django
  • .gitignore 파일을 생성하고 venv 추가(repository에 굳이 올리지 않기 위해)
    - https://www.toptal.com/developers/gitignore 에서 적절한 gitignore 생성
    - Django 부분에 venv 추가
  • git으로 repository에 올리기 -> venv가 안 올라가는지 확인
    - repository 생성하기
    - git init : 현재 디렉터리 기준으로 git 저장소 생성
    - git remote add origin 깃주소 : remote repository를 origin이라는 이름으로 등록
    - git add . : 모든 파일 git stage 추가.
    - git commit -m "commit message" : stage 추가된 파일 commit
    - git push -u origin main : origin(원격저장소 별칭)에 존재하는 branch로 로컬의 branch를 push(u는 업스트림)
  • spartatest라는 django 프로젝트 생성하기
    django-admin startproject spartatest . 
  • introduce라는 앱을 생성하기
    python manage.py startapp introduce
  • settings.py의 INSTALLED_APPS에 'introduce' 추가
  • introduce/templates 경로에 간단한 자기소개를 적은 탬플릿 html 작성
    - introduce 앱 아래 templates 폴더 생성 후 index.html 페이지 생성
  • 127.0.0.1:8000/introduce/ 경로에 페이지에 접속했을 때 자기소개 페이지가 보일 수 있도록 설정
    - spartatest의 urls.pypath('', include('introduce.urls')), 추가 -> 현재경로에서 introduce앱의 urls.py에 연결(introduce/urls.py 파일에 있는 URL 매핑을 참고하여 처리)
    - introduce 앱의 urls.pypath('introduce/', views.introduce_view), 추가 -> introduce/ 경로로 시작되는 페이지 요청은 introduce/views.py에 정의되어있는 introduce_view 함수 호출
    - introduce 앱의 views.pyintroduce_view 함수를 정의return render(request, 'index.html') 추가

 

  • models.py에 AccessLog 테이블 생성(introduce의)
    - created_at : 데이터가 생성된 시간을 알 수 있도록 datetimefield 사용
    - location : 사용자가 어떤 templateㅇ 접근했는지 알 수 있도록 charfield 사용
from django.db import models

class AccessLog(models.Model):
    class Meta:
    	db_table = "AccessLog"  # 테이블 이름
        
    location = models.CharField(max_length=256, default='')
    created_at = models.DateTimeField(auto_now=True)
  • 생성된 테이블을 makemigrations/migrate 명령어를 통해 db에 반영
    python manage.py makemigrations -> 모델 변경을 db에 알림
    python manage.py migrate -> 해당 변경을 db에 반영 요청
  • 생성한 테이블을 admin.py에 등록해주기
from django.contrib import admin
from .models import AccessLog
    
# admin에 AccessLog 테이블 등록
admin.site.register(AccessLog)
  • 사용자가 introduce 페이지에 접속했을 때, 접속 로그 남기기 -> index.페이지를 렌더링할 때마다 AccessLog을 생성하고, 저장
    - admin 페이지에서 언제, 어떤 페이지에 접속했는지 알수 있도록 표현
    - 로그를 저장할 때 어떤 템플릿을 조회했는지 확인
# introduce/views.py
from django.shortcuts import render
from .models import AccessLog

def introduce_view(request):
    accesslog = AccessLog()  # 모델 인스턴스 생성
    accesslog.location = 'introduce'
    accesslog.save()  # 헤딩 모델 인스턴스 저장
    return render(request, 'index.html')
# created_at은 자동 저장, readonly라 admin에서 안 보이는 것 뿐
# 따라서 admin에서 보이게 하려면 admin.py 수정
# introduce/admin.py
from django.contrib import admin
from .models import AccessLog

# admin 페이지를 커스터마이징
class AccessAdmin(admin.ModelAdmin):
    list_display = ('location', 'created_at',)
    
admin.site.register(AccessLog, AccessAdmin)
  • admin 페이지에 접속해서 접속 기록 확인하기
    python manage.py createsuperuser : admin 계정 생성
    python manage.py runserver : django 서버 실행

 

2. Django 원격 강의

  • 로그인 후 페이지 이동하기
    - templates 폴더 아래 tweet 폴더를 만들고 home.html 작성
    - 이동 페이지 연결하기 -> views.py의 함수를 작성하고, urls.py에 연결
# tweet/views.py
from django.shortcuts import render, redirect

def home(request):
    # 사용자가 로그인했는지 검사
    user = request.user.is_authenticated
    if user:  # 로그인했다면
        return redirect('/tweet')
    else:  # 로그인하지 않았다면
        return redirect('/sign-in')
        
        
def tweet(request):
    if request.method == 'GET':
        return render(request, 'tweet/home.html')
# tweet/urls.py

from django.urls import path
from . import views

urlpatterns = [
    # 127.0.0.1:8000 과 views.py 폴더의 home 함수 연결
    path('', views.home, name='home'),
    # 127.0.0.1:8000/tweet 과 views.py 폴더의 tweet 함수 연결
    path('tweet/', views.tweet, name='tweet'),
]
# mySpartaSns/urls.py 수정

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('user.urls')),
    # 해당 파일에서 url 경로를 설정해주고 있음을 django엑 알림
    path('', include('tweet.urls'))
]
반응형