가상환경/프로젝트(pokki) 생성
drf설치
db연결
settings.py > DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'pokki',
'USER': 'postgres',
'PASSWORD': '1234',
'HOST': 'localhost',
'PORT': '5432'
}
}
저장
gresql에서 서버 > 데이터베이스 만들기 > pokki생성
pip install psycopg2
마이그레이션 실행
pokki/models.py 코드 추가
from django.db import models
# Create your models here.
class Company(models.Model):
name = models.CharField(max_length=100)
class Student(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
마이그레이션 실행
pokki/serializers.py생성, 코드 추가
from rest_framework import serializers
from .models import Company, Student
class CompanySerializer(serializers.ModelSerializer):
class Meta:
model = Company
fields = '__all__'
class StudentSerializer(serializers.ModelSerializer):
class Meta:
model = Student
fields = '__all__'
pokki/views.py 코드 추가 // 가져오기
from django.shortcuts import render
from rest_framework import viewsets
from .models import Company, Student
from .serializers import CompanySerializer, StudentSerializer
# Create your views here.
class CompanyViewSet(viewsets.ModelViewSet):
queryset = Company.objects.all()
serializer_class = CompanySerializer
class StudentViewSet(viewsets.ModelViewSet):
queryset = Student.objects.all()
serializer_class = StudentSerializer
pokki/urls.py 생성, 코드 추가
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import CompanyViewSet, StudentViewSet
router = DefaultRouter()
router.register(r'companies', CompanyViewSet)
router.register(r'students', StudentViewSet)
urlpatterns = [
path('api', include(router.urls))
]
프로젝트레벨/urls.py 코드 추가
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path("admin/", admin.site.urls),
path('', include('myapp.urls'))
]
런서버후 /api/로 이동
--
templates/add_student.html 생성, 코드 추가
<h1>교육생 등록</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">등록</button>
</form>pokki/views.py 코드 추가
...
from .forms import StudentForm
from django.shortcuts import render, redirect
...
def student_list(request):
students = Student.objects.all()
return render(request, 'student_list.html', {'students': students})
def add_student(request):
if request.method == 'POST':
form = StudentForm(request.POST)
if form.is_valid():
form.save()
return redirect('student_list')
else:
form = StudentForm()
return render(request, 'add_student.html', {'form': form})
pokki/forms.py 생성, 코드 추가
from django import forms
from .models import Student
class StudentForm(forms.ModelForm):
class Meta:
model = Student
fields = ['name', 'age']
templates/student_list.html 생성, 코드 추가
<!--student_list.html-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>교육생 리스트</h1>
<ul>
{% for student in students %}
<li>이름: {{student.name}} / 나이: {{student.age}}</li>
{% endfor %}
</ul>
<a href="{% url 'add_student' %}">교육생 등록 페이지로 이동</a>
</body>
</html>pokki/urls.py 코드 수정
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import CompanyViewSet, StudentViewSet, add_student, student_list
router = DefaultRouter()
router.register(r"companies", CompanyViewSet)
router.register(r"students", StudentViewSet)
urlpatterns = [
path("api/", include(router.urls)),
path("add", add_student, name="add_student"),
path("", student_list, name="student_list"),
]
templates/add_student.html 생성, 코드 추가
<!-- add_student.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>교육생 등록</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">등록</button>
</form>
</body>
</html>static/css/styles.css 파일 생성, 코드 추가 및 적용
<% load static %>
<link rel="stylesheet" type="text/css" href="{% static 'css/styles.css' %}">
templates/random_student.html 생성, 코드 추가
<h1>랜덤 교육생 결과보기</h1>
<ul>
<li>당첨된 교육생: {{random_student.student.name}}</li>
</ul>views.py 코드 추가
...
def random_student(request):
students = Student.objects.all()
random_student = random.choice(students)
RandomStudent.objects.create(student=random_student)
return redirect('random_student_result')
def random_student_result(request):
random_students = RandomStudent.objects.all()
random_student = len(random_students)-1
return render(request, "random_student.html", {'random_student': random_student})
models.py 코드 추가
...
class RandomStudent(models.Model):
student = models.ForeignKey(Student, on_delete = models.CASCADE)urls.py 코드 추가
...
path('random', random_student, name='random_student'),
path('random/result', random_student_result, name='random_student_result')