Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

向胡阳老师提交自己的课程作业3 #27

Open
wants to merge 1 commit into
base: book/06-admin
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions typeidea/.vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"python.pythonPath": "F:\\DjangoProject\\env\\python.exe"
}
46 changes: 39 additions & 7 deletions typeidea/comment/admin.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,44 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.contrib import admin
from django.urls import reverse
from django.utils.html import format_html

from .models import Comment
from typeidea.custom_site import custom_site

from .adminform import CommentAdminForms
from typeidea.custom_site import comment_admin_site
from typeidea.custom_admin import BaseOwnerAdmin

@admin.register(Comment, site=custom_site)
@admin.register(Comment, site=comment_admin_site)
class CommentAdmin(admin.ModelAdmin):
list_display = ('target', 'nickname', 'content', 'website', 'created_time')
# 展示页面定制
list_display = [
'post', 'content', 'nickname_show',
'email', 'created_time', 'open_comment_website'
]
list_filter = ['nickname', 'post', 'created_time']
search_fields = ['nickname', 'post']

date_hierarchy = 'created_time'

# 编辑页面定制
form = CommentAdminForms
save_on_top = False
save_on_bottom = True
fields = (
('post', 'nickname'),
'email',
'content', 'websit'
)


def open_comment_website(self, obj):
return format_html(
'<a href={}>跳转至评论页</a>',
reverse('comment_amdin:comment_comment_change', args=(obj.id,))
)
open_comment_website.short_description = '评论页'


class CommentInlineAdmin(admin.TabularInline):
fields = ('nickname','content')
extra = 1
model = Comment
5 changes: 5 additions & 0 deletions typeidea/comment/adminform.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django import forms


class CommentAdminForms(forms.ModelForm):
content = forms.CharField(widget=forms.Textarea, label='内容', required=False)
35 changes: 17 additions & 18 deletions typeidea/comment/models.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models
from django.contrib.auth.models import User

from blog.models import Post


class Comment(models.Model):
STATUS_NORMAL = 1
STATUS_DELETE = 0
STATUS_ITEMS = (
(STATUS_NORMAL, '正常'),
(STATUS_DELETE, '删除'),
)
target = models.ForeignKey(Post, verbose_name="评论目标")
content = models.CharField(max_length=2000, verbose_name="内容")
nickname = models.CharField(max_length=50, verbose_name="昵称")
website = models.URLField(verbose_name="网站")
email = models.EmailField(verbose_name="邮箱")
status = models.PositiveIntegerField(default=STATUS_NORMAL, choices=STATUS_ITEMS, verbose_name="状态")
created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
post = models.ForeignKey(Post, on_delete=models.CASCADE, verbose_name='文章')
content = models.CharField(max_length=2000, verbose_name='内容')
nickname = models.CharField(max_length=50, verbose_name='别名')
websit = models.URLField(verbose_name='网址')
email = models.EmailField(verbose_name='邮箱')
created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')

class Meta():
verbose_name = verbose_name_plural = '评论'

def __str__(self):
return '{}'.format(self.post.title)

def nickname_show(self):
return '来自{}的评论'.format(self.nickname)
nickname_show.short_description = '评论者'

class Meta:
verbose_name = verbose_name_plural = "评论"
70 changes: 49 additions & 21 deletions typeidea/config/admin.py
Original file line number Diff line number Diff line change
@@ -1,28 +1,56 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.contrib import admin
from django.utils.html import format_html
from django.urls import reverse

from .models import Link, SideBar
from typeidea.custom_site import custom_site
from typeidea.base_admin import BaseOwnerAdmin
from config.adminform import ConfigLinkAdminForm, ConfigSideBarAdminForm
from typeidea.custom_admin import BaseOwnerAdmin
from typeidea.custom_site import config_admin_site


@admin.register(Link, site=custom_site)
@admin.register(Link, site=config_admin_site)
class LinkAdmin(BaseOwnerAdmin):
list_display = ('title', 'href', 'status', 'weight', 'created_time')
fields = ('title', 'href', 'status', 'weight')

def save_model(self, request, obj, form, change):
obj.owner = request.user
return super(LinkAdmin, self).save_model(request, obj, form, change)


@admin.register(SideBar, site=custom_site)
# 展示页面定制
list_display = [
'title', 'href', 'weight', 'create_time', 'status_show', 'goahead_link'
]
list_filter = ['title', 'create_time', 'weight']
search_fields = ['title', 'weight']

date_hierarchy = 'create_time'

# 编辑页面定制
form = ConfigLinkAdminForm
save_on_top = False
save_on_bottom = True
fields = (
'title', 'weight', 'status', 'href'
)

def goahead_link(self, obj):
return format_html(
'<a href={}>编辑</a>',
reverse('config_admin:config_link_change', args=(obj.id,))
)
goahead_link.short_description = '链接'


@admin.register(SideBar, site=config_admin_site)
class SideBarAdmin(BaseOwnerAdmin):
list_display = ('title', 'display_type', 'content', 'created_time')
fields = ('title', 'display_type', 'content')

def save_model(self, request, obj, form, change):
obj.owner = request.user
return super(SideBarAdmin, self).save_model(request, obj, form, change)
# 展示页面定制
list_display = [
'title', 'display_type', 'content', 'created_time', 'status_show'
]
list_filter = ['title', 'created_time', 'display_type']
search_fields = ['title', 'display_type', 'status']

date_hierarchy = 'created_time'

# 定义编辑页面
form = ConfigSideBarAdminForm
save_on_top = False
save_on_bottom = True

fields = (
'title', 'display_type', 'content', 'status'
)
11 changes: 11 additions & 0 deletions typeidea/config/adminform.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from django import forms


class ConfigSideBarAdminForm(forms.ModelForm):
# status = forms.BooleanField(label='是否下线', required=False)
pass


class ConfigLinkAdminForm(forms.ModelForm):
# status = forms.BooleanField(label='是否下线', required=False)
pass
76 changes: 39 additions & 37 deletions typeidea/config/models.py
Original file line number Diff line number Diff line change
@@ -1,59 +1,61 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.contrib.auth.models import User
from django.db import models
from django.contrib.auth.models import User


class Link(models.Model):
STATUS_NORMAL = 1
STATUS_DELETE = 0
STATUS_ITEMS = (
(STATUS_NORMAL, '正常'),
(STATUS_DELETE, '删除'),
STATUS_ITEM = (
(1, '正常'),
(2, '删除'),
)
title = models.CharField(max_length=50, verbose_name="标题")
href = models.URLField(verbose_name="链接") # 默认长度200
status = models.PositiveIntegerField(default=STATUS_NORMAL, choices=STATUS_ITEMS, verbose_name="状态")
title = models.CharField(max_length=50, verbose_name='标题')
href = models.URLField(verbose_name='链接')
status = models.PositiveIntegerField(default=1, choices=STATUS_ITEM, verbose_name='状态')
weight = models.PositiveIntegerField(default=1, choices=zip(range(1, 6), range(1, 6)),
verbose_name="权重",
help_text="权重高展示顺序靠前")

owner = models.ForeignKey(User, verbose_name="作者")
created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
verbose_name='权重',
help_text='权重越高展示顺序越靠前')
owner = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='作者')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')

class Meta:
verbose_name = verbose_name_plural = "友链"
class Meta():
verbose_name = verbose_name_plural = '友链'

def __str__(self):
return self.title

def status_show(self):
return '当前状态{}'.format(self.status)
status_show.short_description = '状态'


class SideBar(models.Model):
STATUS_SHOW = 1
STATUS_HIDE = 0
STATUS_ITEMS = (
(STATUS_SHOW, '展示'),
(STATUS_HIDE, '隐藏'),
STATUS_ITEM = (
(1, '正常'),
(2, '下线')
)

SIDE_TYPE = (
(1, 'HTML'),
(2, '最新文章'),
(3, '最热文章'),
(4, '最近评论'),
)
title = models.CharField(max_length=50, verbose_name="标题")
display_type = models.PositiveIntegerField(default=1, choices=SIDE_TYPE,
verbose_name="展示类型")
content = models.CharField(max_length=500, blank=True, verbose_name="内容",
help_text="如果设置的不是HTML类型,可为空")

status = models.PositiveIntegerField(default=STATUS_SHOW, choices=STATUS_ITEMS, verbose_name="状态")
owner = models.ForeignKey(User, verbose_name="作者")
created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")

class Meta:
verbose_name = verbose_name_plural = "侧边栏"

display_type = models.PositiveIntegerField(default=1, choices=SIDE_TYPE, verbose_name='展示类型')
content = models.CharField(max_length=500, blank=True, verbose_name='内容',
help_text='如果设置的不是HTML类型,可为空')

status = models.PositiveIntegerField(default=1, choices=STATUS_ITEM, verbose_name='状态')

owner = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='作者')
created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')

class Meta():
verbose_name = verbose_name_plural = '侧边栏'

def status_show(self):
return '当前状态{}'.format(self.status)
status_show.short_description = '状态'

def __str__(self):
return self.title
return self.title
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,10 @@


class BaseOwnerAdmin(admin.ModelAdmin):
"""
1. 用来处理文章、分类、标签、侧边栏、友链这些model的owner字段自动补充
2. 用来针对queryset过滤当前用户的数据
"""
exclude = ('owner', )

def get_queryset(self, request):
qs = super(BaseOwnerAdmin, self).get_queryset(request)
return qs.filter(owner=request.user)

def save_model(self, request, obj, form, change):
obj.owner = request.user
return super(BaseOwnerAdmin, self).save_model(request, obj, form, change)
return super(BaseOwnerAdmin, self).save_model(request, obj, form, change)
22 changes: 18 additions & 4 deletions typeidea/typeidea/custom_site.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,24 @@
from django.contrib.admin import AdminSite


class CustomSite(AdminSite):
site_header = 'Typeidea'
site_title = 'Typeidea管理后台'
class PostAdminSite(AdminSite):
site_header = '文章管理'
site_title = '文章管理后台'
index_title = '首页'


custom_site = CustomSite(name='cus_admin')
class CommentAdminSite(AdminSite):
site_header = '评论管理'
site_title = '评论管理后台'
index_title = '首页'


class ConfigAdminSite(AdminSite):
site_header = '配置管理'
site_title = '配置管理后台'
index_title = '首页'


post_admin_site = PostAdminSite(name='post_admin')
comment_admin_site = CommentAdminSite(name='comment_amdin')
config_admin_site = ConfigAdminSite(name='config_admin')
25 changes: 21 additions & 4 deletions typeidea/typeidea/urls.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,26 @@
from django.conf.urls import url
"""typeidea URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/2.2/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from .custom_site import post_admin_site, comment_admin_site, config_admin_site

from .custom_site import custom_site

urlpatterns = [
url(r'^super_admin/', admin.site.urls),
url(r'^admin/', custom_site.urls),
path('admin/', admin.site.urls),
path('post_admin/', post_admin_site.urls),
path('comment_admin/', comment_admin_site.urls),
path('config_admin/', config_admin_site.urls)
]