python -m venv venv
source venv/Scripts/activate
pip install -r requirements.txt
django-admin startproject pjt0925 .
python manage.py startapp community
python manage.py startapp accounts
INSTALLED_APPS = [
'accounts',
'community']
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR,'templates'],
urlpatterns = [
path('admin/', admin.site.urls),
path('community/',include('community.urls')),
path('accounts/',include('accounts.urls'))
]
from django.urls import path
from . import views
app_name = 'community'
urlpatterns = [
path('',views.index,name='index'),
path('create/',views.create,name='create'),
path('<int:pk>/',views.detail,name='detail'),
path('<int:pk>/update/',views.update,name='update'),
path('<int:pk>/delete/',views.delete,name='delete'),
]
⭐ models
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=20)
age = models.IntegerField()
address = models.CharField(max_length=20)
def __str__(self):
return self.name
from django.db.models import fields
from .models import Movie
class MovieForm(forms.ModelForm):
class Meta:
model = Movie
fields='__all__'
INDEX
@require_safe
def index(request):
movies = Movie.objects.order_by('-pk')
context ={
'movies':movies
}
return render(request,'community/index.html',context)
{% extends 'base.html' %}
{% block content %}
<h1>index page</h1>
{% for movie in movies %}
<p>{{ movie.title }}</p>
<p>{{ movie.content }}</p>
<p>{{ movie.rating }}</p>
<a href="{% url 'community:detail' movie.pk %}">DETAIL</a>
{% empty %}
<p> 내용을 입력하세요 </p>
{% endfor %}
{% endblock content %}
CREATE / ⭐UPDATE
@require_http_methods(['POST','GET'])
def create(request):
if request.method=='POST':
form = MovieForm(request.POST)
if form.is_valid():
movie = form.save()
return redirect('community:detail',movie.pk)
else:
form = MovieForm()
context = {
'form':form
}
return render(request,'community/form.html',context)
@require_http_methods(['GET','POST'])
def update(request,pk):
movie = get_object_or_404(Movie,pk=pk)
if request.method == 'POST':
form = MovieForm(request.POST,instance=movie)
if form.is_valid():
movie = form.save()
return redirect('community:detail',movie.pk)
else:
form = MovieForm(instance=movie)
context ={
'form':form,
'movie':movie
}
return render(request,'community/form.html',context)
{% extends 'base.html' %}
{% block content %}
{% if request.resolver_match.url_name == "create" %}
<h1>CREATE PAGE</h1>
{% else %}
<h1>UPDATE PAGE</h1>
{% endif %}
<form action="" method="POST">
{% csrf_token %}
{{form.as_p}}
<input type="submit">
</form>
{% endblock content %}@require_http_methods(['POST'])
def delete(request,pk):
movie = get_object_or_404(Movie,pk=pk)
movie.delete()
return redirect('community:index')
DETAIL
@require_safe
def detail(request,pk):
movie = get_object_or_404(Movie,pk=pk)
context = {
'movie':movie
}
return render(request,'community/detail.html',context)
{% extends 'base.html' %}
{% block content %}
<h1> DETAIL PAGE</h1>
<p>{{ movie.pk}}번째 게시글</p>
<p>{{ movie.title}}</p>
<p>{{ movie.content}}</p>
<p>{{ movie.rating}}</p>
<form action="{% url 'community:delete' movie.pk %}" method='POST'>
{% csrf_token %}
<button>DELETE</button>
</form>
<form action="{% url 'community:update' movie.pk %}" method="POST">
{% csrf_token %}
<button>UPDATE</button>
</form>
{% endblock content %}
DELETE
@require_http_methods(['POST'])
def delete(request,pk):
movie = get_object_or_404(Movie,pk=pk)
movie.delete()
return redirect('community:index')