$ 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')