장고 시작

hey hey·2021년 12월 7일
0

Django

목록 보기
1/9
post-thumbnail
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
# settings
INSTALLED_APPS = [
    'accounts',
    'community']
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR,'templates'],
# urls
urlpatterns = [
    path('admin/', admin.site.urls),
    path('community/',include('community.urls')),
    path('accounts/',include('accounts.urls'))
]
# community/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

⭐ forms

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')
profile
FE - devp

0개의 댓글