서버를 끈 상태에서 터미널에 super user (관리자계정)을 생성하는 명령어를 입력한다
python manage.py createsuperuser
입력하고 나면 유저네임, 이메일 주소,패스워드를 입력해서 관리자 계정을 생성 완료하면 된다.
서버를 다시 실행하고 관리자 페이지 주소를 접속하면 아래와 같은 페이지가 만들어져 있다.
기본적인 관리자가 제공하는 모델말고 전에 만들어놨던 모델 등록 하고 싶다면 user앱 안에 admin.py 안에 코드를 입력하면 된다.
from django.contrib import admin
from .models import UserModel
##Register your models here.
admin.site.register(UserModel) # 이 코드가 나의 UserModel을 Admin에 추가 해 줍니다
#tweet/models.py
from django.db import models
from user.models import UserModel
##Create your models here.
class TweetModel(models.Model):
class Meta:
db_table = "tweet"
author = models.ForeignKey(UserModel, on_delete=models.CASCADE)
content = models.CharField(max_length=256)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
author는 새로운 사람이 아니라, 아까 내가 만들어 주었던 User Model의 사용자가 작성 한 글 이기 때문에 ForeignKey를 사용해서 넣어주었다.
서버를 잠시 끄고 데이터베이스에 명령어로 입력해서 적용
python manage.py makemigrations
python manage.py migrate
mySpartaSns에 있는 urls.py를 열고 코드를 수정한다.
#mySpartaSns/urls.py
from django.contrib import admin
urlpatterns = [
path('admin/', admin.site.urls),
]
#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')
회원가입(signup)의 주소는 'sign-up', 로그인(signin)의 주소는 'sign-in'으로 적용. user앱의 urls.py를 작성하면
from django.urls import path
urlpatterns = [
path('sign-up/', views.sign_up_view, name='sign-up'),
path('sign-in/', views.sign_in_view, name='sign-in'),
]
이와 같은 코드가 나온다. 이후 서버를 작동하고 각 주소를 접속해보고 에러가 나지 않는지 확인한다.
회원가입 페이지를 보여주는 url은 'sign-up'이고
GET'이라는 방식으로 화면을 보여준다. 가입정보를 입력하고 전송 하는 url은 동일하게 'sign-up'으로 할 것이지만 'POST'라는 방식으로 보내줘야한다.
user앱의 views.py의 sign_up_view 함수에 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 ""
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">
html의 input에 입력 했던 username, password, password2, bio로 sign_up_view()함수로 들어간다.
html에서 넘겨준 데이터를 views.py에서 받아주고.
password와 password2가 일치하는지 확인 해 주고, 일치하면 저장 해 준다.
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()
#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')
방금까지 작성한 url과 view로 html에서 데이터를 넘겨주어야 한다.
signin.html의 form태그
에 action과 method를 추가
< 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">
def sign_in_view(request):
if request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
return HttpResponse("로그인 성공!")
elif request.method == 'GET':
return render(request, 'user/signin.html')
#user/views.py
def sign_in_view(request):
if request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
return HttpResponse("로그인 성공!")
else: # 로그인이 실패하면 다시 로그인 페이지를 보여주기
return redirect('/sign-in')
elif request.method == 'GET':
return render(request, 'user/signin.html')