장고로 설치부터 앱만들기 까지 배웠다. 8시간?동안 너무 빨리 나가서 복습을 해도 아직 잘모르겠다.

  1. 장고 설치 및 데이터베이스 생성
pip install django
django-admin startproject config .
python manage.py migrate(기본 데이터베이스 생성)
python manage.py createsuperuser(계정생성)
python manage.py runserver

/admin -> urls에 등록되어있다

  1. 앱 생성
python manage.py startapp bookmark(앱 생성)
  1. 앱 추가

settings.py 에 앱 추가

'bookmark',
  1. models.py에 클래스 추가(형식 지정)
from django.db import models


class Bookmark(models.Model):

    site_name = models.CharField(max_length=100)
    url = models.URLField('Site URL')

    def __str__(self):
        return "이름 : " + self.site_name + ", 주소 : " + self.url
  1. python manage.py makemigrations bookmark(데이터 넣을 공간 생성)

  2. python manage.py migrate(읽어오기)

  3. admin.py

from django.contrib import admin
from .models import Bookmark

admin.site.register(Bookmark)
  1. views.py(리스트 뷰 만들기)
from django.views.generic.list import ListView

from.models import Bookmark

(models에서 만든 클래스 불러오면된다... 다가져오려면 * 붙이면된다)

클래스 생성하기
class BookmarkListView(ListView):
    model = Bookmark
  1. bookmark/urls.py 생성 및 config/urls.py에 bookmark urls 추가
path('bookmark/', include("bookmark.urls"))
bookmark/urls 에
from django.urls import path
from .views import BookmarkListView

urlpatterns = [
    path('', BookmarkListView.as_view(), name='list')


]
슬래쉬 뒤에 아무것도 없을때 호출하는거(주소, 뷰에서 가져올거, 이름)
  1. bookmark_list.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Bookmark list</title>
</head>
<body>
  <div class="container">
    <div class="btn-group">
      <a href="#" class = "btn btn-info">Add Bookmark</a>
    </div>
    <table class="table">
      <thead>
        <tr>
          <th scope = "col">no</th>
          <th scope = "col">Site</th>
          <th scope = "col">URL</th>
          <th scope = "col">Modify</th>
          <th scope = "col">Delete</th>
        </tr>
      </thead>
      <tbody>
        {% for bookmark in object_list %}
        <tr>
          <td>{{ forloop.counter }}</td>
          <td>{{ bookmark.site_name }}</td>
          <td>{{ bookmark.url }}</td>
          <td><a href="" class="btn btn-success btn-sm">Modify</a></td>
          <td><a href="" class="btn btn-danger btn-sm">Delete</a></td>
        </tr>
        {% endfor %}
      </tbody>
    </table>
  </div>
</body>
</html>
  1. views.py(추가 페이지)
from django.views.generic.edit import CreateView 추가#입력
from django.urls import reverse_lazy#해당되는 페이지로 넘어감
class BookmarkCreateView(CreateView):
    model = Bookmark
    fields = ['site_name', 'url'] #이렇게 두개를 받을거다
    success_url = reverse_lazy('list')#list는 urls에서 정해놨다
    template_name_suffix = '_create'#템플릿 이름 생성... 마지막에 _create붙여준다
  1. bookmark/urls.py
from django.urls import path
from .views import BookmarkListView, BookmarkCreateView

urlpatterns = [
    path('', BookmarkListView.as_view(), name='list'),
    path('add/', BookmarkCreateView.as_view(), name='add'),
]
  1. create.html 만들기
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Bookmark Create</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KyZXEAg3QhqLMpG8r+8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We" crossorigin="anonymous">
</head>
<body>
    <div class="container mt-5">
        <form action="" method="post">
            {% csrf_token %}
            {{ form.as_p }}
            <input type="submit" value="add" class="btn btn-info">
        </form>
    </div>
</body>
</html>
  1. views.py(상세 보기 페이지)
from django.views.generic.detail import DetailView #내용 받아옴

class BookmarkDetailView(DetailView):
    model = Bookmark
  1. urls.py
    import할게 많아졌으니 *로 바꿈
from .views import *
    path('detail/<int:pk>/', BookmarkDetailView.as_view(), name='detail'),
  1. detail.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Detail</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KyZXEAg3QhqLMpG8r+8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We" crossorigin="anonymous">

</head>
<body>
  <div class="container mt-5">
    {{ object.site_name }}<br/>
    {{ object.url }}
  </div>
</body>
</html>
  1. views.py(수정 기능)
from django.views.generic.edit import UpdateView #수정

class BookmarkUpdateView(UpdateView)
    model = Bookmark
    fields = ['site_name', 'url']
    template_name_suffix = '_update' #업데이트라는 이름으로 링크를 걸겠다'
  1. urls.py
path('update/<int:pk>/', BookmarkUpdateView.as_view(), name='update'),추가
  1. update.html 추가
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Bookmark Update</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KyZXEAg3QhqLMpG8r+8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We" crossorigin="anonymous">
</head>
<body>
    <div class="container mt-5">
        <form action="" method="post">
            {% csrf_token %}
            {{ form.as_p }}
            <input type="submit" value="update" class="btn btn-info">
        </form>
    </div>
</body>
</html>
  1. models.py
from django.urls import reverse

    def get_absolute_url(self):
        return reverse('detail', args=[str(self.id)])
  1. views.py(삭제)
from django.views.generic.detail import DeleteView

class BookmarkDeleteView(DeleteView):
    model = Bookmark
    success_url = reverse_lazy('list')
  1. urls.py
 path('delete/<int:pk>/', BookmarkDetailView.as_view(), name='delete'),

23.list.html

<td><a href="{% url 'delete' pk=bookmark.id %}" class="btn btn-danger btn-sm">Delete</a></td>

24.delete.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Delete Confirm</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KyZXEAg3QhqLMpG8r+8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We" crossorigin="anonymous">

</head>
<body>
  <form action="" method="post">
    {% csrf_token %}
    <div class="alert alert-danger">Do you want to delete Bookmark "{{ object }}"?</div>
    <input type="submit" value="del" class="btn btn-danger">

  </form>
</body>
</html>

profile
smilegate megaport infra

0개의 댓글