원문>
번역 / 수정>
장고 쉘 사용법을 알아보자.
일반 쉘이랑 틀린 점은 장고 쉘은 장고에 모든 기능을 사용할 수 있다.
앞에 더미 데이터를 만들었으므로 사용을 해보자.
또한, 작성자를 만들어서 포스트 내용에 작성자를 표현해본다.
(현재 일부 기능은 작동하지 않음(변경 방법 구색))
1. 장고 쉘
python manage.py shell
2. Post 객체에 접근
from blogengine.models import Post
3. 저장된 데이터를 모두 조회
Post.objects.all()
<QuerySet [<Post: Etiam sit amet ligula>, <Post: Vivamus ligula tellus>,
<Post: Maecenas non pulvinar magna>, <Post: In dignissim feugiat imperdiet>,
<Post: Fusce bibendum neque sed>, <Post: Sed suscipit ultrices imperdiet>,
<Post: 감사원은 세입 세출>]>
블로그 포스트는 제목으로 표현된다. |
4. Primary Key(id)가 1인 Post객체 표시
p = Post.objects.get(pk=1)
p
p = Post.objects.get(id=1)
p
<Post: Etiam sit amet ligula>
pk = id 기본 키는 테이블의 한 항목을 고유하게 참조하는 데이터베이스 테이블의 값을 말한다. |
5. 게시글의 날짜를 확인
p.pub_date
datetime.datetime(2020, 5, 13, 12, 1, 33, tzinfo=<UTC>)
datetime.datetime개체가 반환된다. |
6. 게시글의 년도를 확인
p.pub_date.year
2020
7. 게시글의 월을 확인
p.pub_date.month
5
8. 게시글의 일을 확인
p.pub_date.day
13
9. models(blogengine>models.py)
원문 코드>
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):
title = models.CharField(max_length=200)
pub_date = models.DateTimeField()
text = models.TextField()
slug = models.SlugField(max_length=40, unique=True)
author = models.ForeignKey(User)
def __unicode__(self):
return self.title
수정 코드>
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):
title = models.CharField(max_length=200)
pub_date = models.DateTimeField()
text = models.TextField()
slug = models.SlugField(max_length=40, unique=True,
allow_unicode=True, null=False)
author = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.title
on_delete=models.CASCADE |
ForeignKeyField가 바라보는 값이 삭제될 때 ForeignKeyField를 포함하는 모델 인스턴스도 삭제된다. |
10. admin(blogengine>admin.py)
원문 코드>
import models
from django.contrib import admin
from django.contrib.auth.models import User
class PostAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("title",)}
exclude = ('author',)
def save_model(self, request, obj, form, change):
obj.author = request.user
obj.save()
admin.site.register(models.Post, PostAdmin)
수정 코드>
from django.contrib import admin
from django.contrib.auth.models import User
from .models import Post
class PostAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("title",)}
exclude = ('author',)
def save_model(self, request, obj, form, change):
obj.author = request.user
obj.save()
admin.site.register(Post, PostAdmin)
사용자 모델을 가져오고 PostAdmin클래스 정의에서 작성자 필드를 제외한다. |
11. 장고 쉘
python manage.py shell
12. default(templates>default.html)
원문 코드>
<html>
<head>
<title>My Django Blog</title>
</head>
<body>
<h1>{{ flatpage.title }}</h1>
{{ flatpage.content }}
</body>
</html>
수정 코드>
<html>
<head>
<title>My Django Blog</title>
</head>
<body>
{% block content %}
{% endblock %}
</body>
</html>
{% block content %} {% endblock %} |
default.html을 상속한 템플릿에서 구현되는 부분이다. |
13. posts(templates>posts.html)
원문 코드>
{% include 'header.html' %}
{% for post in posts %}
<h1><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></h1>
<h3>{{ post.pub_date }}</h3>
{{ post.text }}
<h3>By {{ post.author.first_name }} {{ post.author.last_name }}</h3>
{% endfor %}
<br />
{% if page.has_previous %}
<a href="/{{ page.previous_page_number }}/">Previous Page</a>
{% endif %}
{% if page.has_next %}
<a href="/{{ page.next_page_number }}/">Next Page</a>
{% endif %}
{% include 'footer.html' %}
수정 코드>
{% extends 'default.html' %}
{% block content %}
{% for post in posts %}
<h1><a href="/blog/{{ post.slug }}">{{ post.title }}</a></h1>
<h3>{{ post.pub_date }}</h3>
{{ post.text }}
<h3>by {{ post.author }}</h3>
{% endfor %}
<br />
{% if page.has_previous %}
<a href="/blog/{{ page.previous_page_number }}/">Previous Page</a>
{% endif %}
{% if page.has_next %}
<a href="/blog/{{ page.next_page_number }}/">Next Page</a>
{% endif %}
{% endblock %}
{% extends 'default.html' %} |
default.html을 상속 받는다. |
14. 테스트 화면
- 작성자 표시
- 데이터베이스 구조
'Python_WEB > Django_Tutorial' 카테고리의 다른 글
[Django]Blog Creation Tutorial(Translation/Correction) 2 (0) | 2020.05.13 |
---|---|
[Django]Blog Creation Tutorial(Translation/Correction) 1 (0) | 2020.05.12 |
[Django]Survey WEB Application Tutorial 7 (0) | 2020.05.09 |
[Django]Survey WEB Application Tutorial 6 (0) | 2020.04.30 |
[Django]Survey WEB Application Tutorial 5 (0) | 2020.04.30 |