
$ django-admin startapp user
$ django-admin startapp tweet
추가한 앱들을 장고가 인식할 수 있도록 settting.py의 INSTALLED_APPS에 추가해준다.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'tweet',
'user',
]
장고를 한번이라도 실행하면, DATABASES의 정보를 가지고와서 데이터베이스와 자동으로 연동을 하기때문에 실행해준다.
db.sqlite3이 생성되었는지 확인
우측 상단의 Database 탭에서 db.sqlite3로 path를 설정해준다
ORM(Object Relational Mapping)은 db를 하나의 object로 보고, 클래스로 쉽게 표현 및 사용 할 수 있게 해준다.
class myBakery:
bread_type = '' # 빵의 종류
bake_time = '' # 굽는 시간
price = 0 # 가격
# 위와 같이 클래스를 이용하여 db구조설계 가능
user app에 models.py를 만들어 준다.#user/models.py
from django.db import models
# Create your models here.
class UserModel(models.Model):
class Meta:
db_table = "my_user"
username = models.CharField(max_length=20, null=False)
password = models.CharField(max_length=256, null=False)
bio = models.CharField(max_length=256, default='')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
db 변경을 알려주는 명령어 makemigrations
python manage.py makemigrations
변경 된 db를 적용 시켜주는 migrate
python mangage.py migrate
# 하단에 user.--- 이 나오면 모델이 적용되었다는 뜻
createsuperuser 만들기python manage.py createsuperuser
from django.contrib import admin
from .models import UserModel
# Register your models here.
admin.site.register(UserModel) # 이 코드가 나의 UserModel을 Admin에 추가 해 줍니다

user/urls.py 만들기# <프로젝트이름>/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('user.urls'))
# user의 usrls.py 연결
]
user/views.py를 user/urls.py에 연결하기# user/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('sign-up/', views.sign_up_view, name='sign-up'),
# url 설정, views 함수 연결
path('sign-in/', views.sign_in_view, name='sign-in'),
]
user/views.py 에 html 연결하기from django.shortcuts import render
# Create your views here.
def sign_up_view(request):
return render(request, 'user/signup.html')
def sign_in_view(request):
return render(request, 'user/signin.html')
user/views.py 에 HTTP 요청 방식을 구분하는 코드 만들기# user/views.py
def sign_up_view(request):
if request.method == 'GET': # GET 메서드로 요청이 들어 올 경우
return render(request, 'user/signup.html')
elif request.method == 'POST': # POST 메서드로 요청이 들어 올 경우
return ""
form태그 설정<!-- 윗 부분 생략 -->
<div class="wrap">
<h2 class="title-center"> 회원가입 </h2>
<form class="form-area" method="post" action="/sign-up/">
{% csrf_token %}
<div class="form-group mt-2 mb-2">
<label for="username">이름</label>
<input type="text" class="form-control" id="username" name="username">
</div>
<div class="form-group mt-2 mb-2">
<!-- 아랫 부분 생략 -->
<button type="submit" class="btn btn-primary">회원가입</button> 버튼은, form태그의 method로 action에 데이터를 보내주는 역할
{% csrf_token %} 은, Django에서 post 할 때에 보안을 위해서 사용
signup.html의 <input>태그들의 id,name들(username,password,password2,bio) 숙지
위 정보들은 user/views.py 의 sign_up_views()함수로 들어가게 됨
user/views.py에서 데이터 받아서 저장하기# user/views.py
from django.shortcuts import render, redirect
from .models import UserModel
def sign_up_view(request):
if request.method == 'GET':
return render(request, 'user/signup.html')
elif request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
password2 = request.POST.get('password2', None)
bio = request.POST.get('bio', None)
if password != password2:
return render(request, 'user/signup.html')
else:
new_user = UserModel()
new_user.username = username
new_user.password = password
new_user.bio = bio
new_user.save()
return redirect('/sign-in')
# user/views.py
from django.http import HttpResponse
def sign_in_view(request):
if request.method == 'POST':
return HttpResponse("로그인 성공!")
elif request.method == 'GET':
return render(request, 'user/signin.html')
signin.html form만들기<!-- 윗부분 생략 -->
<div class="wrap">
<h2 class="title-center"> 로그인</h2>
<form class="form-area" action="/sign-in/" method="post">
{% csrf_token %}
<div class="form-group mt-2 mb-2">
<!-- 아랫 부분 생략 -->
# user/views.py
def sign_in_view(request):
if request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
me = UserModel.objects.get(username=username) # 사용자 불러오기
if me.password == password: # 저장된 사용자의 패스워드와 입력받은 패스워드 비교
request.session['user'] = me.username # 세션에 사용자 이름 저장
return HttpResponse("로그인 성공!")
else: # 로그인이 실패하면 다시 로그인 페이지를 보여주기
return redirect('/sign-in')
elif request.method == 'GET':
return render(request, 'user/signin.html')