🤯 django time attack
1번) blog app 생성
- 아래의 명령어를
terminal
에 입력해 앱 생성
$ django-admin startapp blog
- 프로젝트 탐색기에
blog
앱이 생긴 것을 확인
timeattack_retry_0531/settings.py
에서 생성된 앱 등록
INSTALLED_APPS = [
'blog',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
2, 3, 4번) model 생성
blog
앱 안에 모델을 생성할 것이므로 blog/models.py
에서 모델 생성
from django.db import models
class Category(models.Model):
class Meta:
db_table = 'category'
name = models.CharField(max_length=50)
desc = models.TextField()
class Article(models.Model):
class Meta:
db_table = 'article'
title = models.CharField(max_length=20)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
content = models.TextField()
- 이제 해당 모델을 같은 앱 폴더 안에 있는
blog/admin.py
에 입력
from django.contrib import admin
from .models import Category, Article
admin.site.register(Category)
admin.site.register(Article)
- db에서 해당 모델들을 사용하기 위해
migrate 절차
진행
- 아래의 코드를
terminal
에서 입력
$ python manage.py makemigrations
$ python manage.py migrate
- 그리고 db를 세팅해야 함(파이참은 오른쪽 데이터베이스 창에서 가능)
5번) admin 페이지에서 카테고리 생성
- admin 페이지를 사용하려면 먼저
super user
를 생성해야 함
termianl
에서 아래의 코드를 입력하고, 가입 절차를 거치면 됨
만약 비밀번호 에러나면 쿨하게 하나 더 만드셈 ㅋ 시간낭비하지말고
- 이번에 다시 시도하면서 경험한 점인데,
db를 migrate하지 않고 슈퍼유저를 만들게 되면
엄청난 양의 에러를 대면하게 됨
$ python manage.py createsuperuser
- 그 다음에
http://127.0.0.1:8000/admin/
로 가서 로그인 진행
- 그리고 카테고리의
add
를 눌러 카테고리를 생성해주면 됨
6번 이후
timeattack_retry_0531/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls'))
]
from django.urls import path
from . import views
urlpatterns = [
path('', views.category_view, name="category"),
path('new/', views.new_view, name="new"),
path('detail/<int:id>', views.detail_view, name="detail"),
path('<str:name>', views.article_view, name="article"),
]
from django.shortcuts import render, redirect
from .models import Category, Article
def new_view(request):
if request.method == 'GET':
categories = Category.objects.all()
return render(request, 'new.html', {'categories': categories})
elif request.method == 'POST':
title = request.POST.get('title', '')
category = request.POST.get('category', '')
content = request.POST.get('content', '')
categories = Category.objects.all()
if title == '' or category == '' or content == '':
return render(request, 'new.html', {'error': '값을 제대로 입력해주세요!', 'categories': categories})
else:
category = Category.objects.get(name=category)
article = Article.objects.create(title=title, category=category, content=content)
return redirect('detail', article.id)
def category_view(request):
categories = Category.objects.all()
infos = {}
for category in categories:
infos[category] = Article.objects.filter(category=category).count()
return render(request, 'category.html', {'infos': infos})
def article_view(request, name):
category = Category.objects.get(name=name)
articles = Article.objects.filter(category=category)
return render(request, 'article.html', {'articles': articles})
def detail_view(request, id):
article = Article.objects.get(id=id)
return render(request, 'detail.html', {'article': article})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>New</title>
</head>
<body>
<form>
{% csrf_token %}
{% if error %}
<div class="alert alert-danger" role="alert" style="color: red;">
{{ error }}
</div>
{% endif %}
<div>
<input name="title" placeholder="제목을 입력하세요.">
</div>
<select name="category">
{% for cate in categories %}
<option>{{ cate.name }}</option>
{% endfor %}
</select>
<div>
<input name="content" placeholder="내용을 입력하세요.">
</div>
<button type="submit">등록하기</button>
</form>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Category</title>
</head>
<body>
{% for name, count in infos.items %}
<a href="{% url "article" name %}">{{ name }} ({{ count }})</a>
{% endfor %}
<a href="{% url "new" %}">글쓰기</a>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Article</title>
</head>
<body>
{% for article in articles %}
<a href="{% url "detail" article.pk %}">{{ article.title }}</a>
{% endfor %}
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Detail</title>
</head>
<body>
<h1>{{ article.title }}</h1>
<p>{{ article.content }}</p>
<p>[ {{ article.category.name }} ]</p>
<a href="{% url 'category' %}">목록으로</a>
</body>
</html>