장고로 설치부터 앱만들기 까지 배웠다. 8시간?동안 너무 빨리 나가서 복습을 해도 아직 잘모르겠다.
pip install django
django-admin startproject config .
python manage.py migrate(기본 데이터베이스 생성)
python manage.py createsuperuser(계정생성)
python manage.py runserver
/admin -> urls에 등록되어있다
python manage.py startapp bookmark(앱 생성)
settings.py 에 앱 추가
'bookmark',
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
python manage.py makemigrations bookmark(데이터 넣을 공간 생성)
python manage.py migrate(읽어오기)
admin.py
from django.contrib import admin
from .models import Bookmark
admin.site.register(Bookmark)
from django.views.generic.list import ListView
from.models import Bookmark
(models에서 만든 클래스 불러오면된다... 다가져오려면 * 붙이면된다)
클래스 생성하기
class BookmarkListView(ListView):
model = Bookmark
path('bookmark/', include("bookmark.urls"))
bookmark/urls 에
from django.urls import path
from .views import BookmarkListView
urlpatterns = [
path('', BookmarkListView.as_view(), name='list')
]
슬래쉬 뒤에 아무것도 없을때 호출하는거(주소, 뷰에서 가져올거, 이름)
<!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>
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붙여준다
from django.urls import path
from .views import BookmarkListView, BookmarkCreateView
urlpatterns = [
path('', BookmarkListView.as_view(), name='list'),
path('add/', BookmarkCreateView.as_view(), name='add'),
]
<!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>
from django.views.generic.detail import DetailView #내용 받아옴
class BookmarkDetailView(DetailView):
model = Bookmark
from .views import *
path('detail/<int:pk>/', BookmarkDetailView.as_view(), name='detail'),
<!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>
from django.views.generic.edit import UpdateView #수정
class BookmarkUpdateView(UpdateView)
model = Bookmark
fields = ['site_name', 'url']
template_name_suffix = '_update' #업데이트라는 이름으로 링크를 걸겠다'
path('update/<int:pk>/', BookmarkUpdateView.as_view(), name='update'),추가
<!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>
from django.urls import reverse
def get_absolute_url(self):
return reverse('detail', args=[str(self.id)])
from django.views.generic.detail import DeleteView
class BookmarkDeleteView(DeleteView):
model = Bookmark
success_url = reverse_lazy('list')
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>