上篇创建了一个项目,项目相当于站点,应用即是独立的功能模块。比如:淘宝是一个完整的网站,即是一个项目。而淘宝下的聚划算属于一个应用
在django中,一个应用是由模型、视图、模板以及url配置组成的。
创建一个blog应用
☁ mysite python manage.py startapp blog
☁ mysite tree blog
blog
├── __init__.py
├── admin.py # 将模型注册到站点管理后台
├── apps.py # 应用的主配置
├── migrations # 数据库迁移文件
│ └── __init__.py
├── models.py # 模型文件,每个应用都必须有一个文件文件
├── tests.py # 测试文件
└── views.py # 应用的逻辑都写在view层,包括接收http请求,处理逻辑,返回响应
1 directory, 7 files
一个博客最重要的数据就是文章,接下来我们设计文章的字段
一篇文章的字段有:标题、摘要、作者、内容、发布时间、创建时间、更新时间、状态
数据对应的是模型,即blog的models.py
代码实现:
blog/models.py
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
class Post(models.Model):
STATUS_CHOICES = (
('draft', 'Draft'), # 草稿
('published', 'Published'), # 已发布
)
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250,
unique_for_date='publish')
author = models.ForeignKey(User,
on_delete=models.CASCADE,
related_name='blog_posts')
body = models.TextField()
publish = models.DateTimeField(default=timezone.now)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=10,
choices=STATUS_CHOICES,
default='draft')
class Meta:
ordering = ('-publish',) # 按发布时间倒序排列
def __str__(self):
return self.title
字段定义说明:
yyyy/mm/dd/slug/
, unique_for_date 表示slug与日期的组合是惟一的,即每篇文章的url不可重复关于字段类型的更多使用,参见官方文档
根据models.py字义的字段执行数据迁移
☁ mysite python manage.py makemigrations blog
App 'blog' could not be found. Is it in INSTALLED_APPS?
提示找不到blog应用,这是因为每添加一个应用,都需要到settings.py中激活
mysite/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog.apps.BlogConfig', # 注册 blog 应用
]
生成数据库迁移文件
☁ mysite python manage.py makemigrations blog
Migrations for 'blog':
blog/migrations/0001_initial.py
- Create model Post
执行数据迁移,此时就创建好了post数据表
☁ mysite python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, blog, contenttypes, sessions
Running migrations:
Applying blog.0001_initial... OK
进入后台的第一步是创建管理员
☁ mysite python manage.py createsuperuser
Username (leave blank to use 'long'): admin
Email address: test@qq.com
Password:
Password (again):
Superuser created successfully.
重启webserver服务
☁ mysite python manage.py runserver
访问 http://127.0.0.1:8000/admin
login
后台主页
admin index
blog/admin.py
from django.contrib import admin
from .models import Post
admin.site.register(Post)
刷新后台,便能看到post
后台post页面
点击add,添加一篇文章
add post
mysite/blog/admin.py
from django.contrib import admin
from .models import Post
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'publish', 'status')
post显示的字段
mysite/blog/admin.py
from django.contrib import admin
from .models import Post
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'publish', 'status')
list_filter = ('status', 'created', 'publish', 'author')
search_fields = ('title', 'body')
prepopulated_fields = {'slug': ('title',)}
raw_id_fields = ('author',)
date_hierarchy = 'publish'
ordering = ('status', 'publish')
搜索栏
搜索
侧边栏过滤选项
过滤
下一节将讲解如何使用django的模型查询语句。如果你感兴趣,请关注我的django2实战
文集
如果觉得本文对你有所帮助,点个赞,或者赏杯咖啡钱,你的认可对我很重要
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有