회원가입 양식에 사용자가 입력한 값(name, password 등)을 DB에 저장하기 위한 models.py 만들기
예)
from django.db import models
# Create your models here.
class User(models.Model): #장고에서 제공하는 models.Model를 상속받아야한다.
username = models.CharField(max_length=64,verbose_name = '사용자명')
password = models.CharField(max_length=64,verbose_name = '비밀번호')
registered_dttm = models.DateTimeField(auto_now_add=True,verbose_name='등록시간')
#저장되는 시점의 시간을 자동으로 삽입해준다.
class Meta: #메타 클래스를 이용하여 테이블명 지정
db_table = 'test_user'
*Time_zone세팅(생성 시간이 미국 기준으로 나오기 때문)
TIME_ZONE = 'Asia/Seoul' # timezone1서울
USE_I18N = True
USE_L10N = True
USE_TZ = False
python manage.py makemigrations
python manage.py migrate
from django.contrib import admin
from .models import User #같은 경로의 models.py에서 User라는 클래스를 임포트한다.
# Register your models here.
class UserAdmin(admin.ModelAdmin) :
list_display = ('username', 'password')
admin.site.register(User, UserAdmin) #site에 등록
관리자 계정 생성 후 서버 실행해서 데이터 잘 들어갔는지 확인
API는 클라이언트와 서버가 통신하는 방식
REST의 CRUD 메서드
더 쉽게 표현하면 아래와 같다
탬플릿 태그
{% %}
load static, for, if 흐름 제어가 가능. html상에서 프로그래밍 적 로직의 구현을 위함
for태그 loop에 사용할 수 있는 변수(i같은거)
forloop.counter : 현재까지 루프 실행한 loopcounter(1부터)
forloop.counter0 (0부터)
forloop.recounter : loop끝에서 현재가 몇번째인지 카운트한 숫자(1부터)
forloop.recounter0
forloop.first :첫번째 실행이면 true
forloop.last : 마지막실행이면 true
forloop.parentloop : 중첩된 루프에서 현재의 루프 바로 상위의 루프값.
if뒤 변수가 True만 아래문장 실행. 필터, 연산자 사용가능. 필터가 스트링반환시에 산술연산은 불가
and, or, not, and not, > >=, < <= ,in, not in 등 비교연산 가능
{% csrf_token %} CSRF 공격 방지를 위한 태그, 장고 내부적으로 CSRF 토큰값의 유효성을 검증
form태그 바로 첫줄에 넣음
{% url %} url하드코딩을 방지
{% url'namespace:view-name' arg1 arg2 %}
{% with %} : eith ~ endwith 내에 특정값을 변수에 저장해두는 기능
{% with call = store.owner.count %}{% endwith %}
{{ call }} people in store
{% load %} : 필터 및 사용자 정의 태그를 로딩해줌
block, extends : 중복되는 html파일 반복해서 작성 해야하는 번거로움을 줄여준다.(탬플릿 상속)
상속하는 부모 템플릿에는 {% block %} {% endblock %}
상속 받는 자식 템플릿은 {% extends %}를 ''최상단''에 표시.(무조건 첫번째 탬플릿태그여야함.)
즉 extends 가 탬플릿 상단에 있으면 템플릿 세스템은 부모 템플릿부터 찾게됨
태그에 가독성을 위한 이름 부여 가능. {% block aa %} {% endblock aa %}