用Django搭建个人博客

django安装与初始:https://blog.csdn.net/liuxingxing_sun/article/details/117969476?spm=1001.2014.3001.5501
reference: datawhale&https://blog.csdn.net/xjm850552586/article/details/82845285

创建项目

第一步:
 django_admin startproject Estre
第二步: 
python manage.py startapp blog

生成以下文件夹:
在这里插入图片描述
第三部:进入settings.py进行配置
在这里插入图片描述
如没有自动生成templates文件夹,需要手动添加路径
在这里插入图片描述
配置静态文件
在这里插入图片描述

创建首页

HTML页面

{% load static %}

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Estre_blog</title>
    <link rel="shortcut icon" href="{% static 'images/gt_faviocn.png' %}">
    <link rel="stylesheet" media="screen" href="http://fonts.googleapis.com/css?family=Open+Sans:300,400,700">
    <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
	<link rel="stylesheet" href="{% static 'css/font-awesome.min.css' %}">
	<!-- Custom styles for our template -->
	<link rel="stylesheet" href="{% static 'css/bootstrap-theme.css'%}"  >
	<link rel="stylesheet" href="{% static 'css/log.css'%}">
	<link rel="stylesheet" href="{% static 'css/blog.css'%}">
</head>

<body class="back">
    <div class="navbar navbar-inverse navbar-fixed-top headroom" >
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span>
                </button>
                <a class="navbar-brand"><img src="{%static 'css/images/lo.png'%}" alt="Progressus HTML5 template"></a>
            </div>
            <div class="nav navbar-nav navbar-right">
                <a class="btn" href="{% url 'login' %}">登录 / 注册</a></li>
            </div>
        </div>
    </div>


	<center>
    <div class="container" style="padding-top:300px;min-height:800px">
        <div class="row">,.
        <p class="lead"><font color="white">Estrella的个人博客('▽')</font></p>
        <p class="tagline"><font color="white">This is a test</font></p>
							<!--在这里填写登录提交  2-->
        <p><a class="btn btn-action btn-lg" role="button" href="{% url 'login' %}">START NOW</a></p>
         </div>
    </div>
	</center>

   <footer id="footer" class="top-space">
		<div class="footer2">
			<div class="container">
				<p class="text-center">Copyright &copy;universe</p>
			</div>
		</div>
  </footer>

</body>

</html>

view.py配置

def index_unlog(request):
    return render(request,'index_unlog.html')

url.py配置

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/',include('blog.urls')),
    path('',views.index_unlog,name='index_unlog'),

运行python manage.py runserver进行查看
在这里插入图片描述

创建数据库

blog/Models.py

from django.contrib.auth.models import User
class Category(models.Model):

    STATUS_ITEMS=(
        (1,"正常"),
        (0,"删除"),
    )
    name = models.CharField(max_length=50, verbose_name="名称")
    status = models.IntegerField(choices=STATUS_ITEMS, default=1, verbose_name="状态")
    owner = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="作者")
    is_nav = models.BooleanField(default=False, verbose_name="是否为导航")
    created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")

    def __str__(self):
        return self.name

    class Meta:
        verbose_name=verbose_name_plural="分类"


class Tag(models.Model):
    """标签"""
    STATUS_ITEMS = (
        (1, "正常"),
        (0, "删除"),
    )
    name = models.CharField(max_length=50)
    owner = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="作者")
    status = models.IntegerField(choices=STATUS_ITEMS, default=1, verbose_name="状态")
    created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = verbose_name_plural = '标签'


class Post(models.Model):
    """文章"""
    STATUS_ITEMS = (
        (0, "删除"),
        (1, "正常"),
        (2, "草稿")

    )
    title = models.CharField(max_length=255, verbose_name="标题")
    owner = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="作者")
    category = models.ForeignKey(Category, verbose_name="分类", on_delete=models.CASCADE)
    tags = models.ManyToManyField(Tag, verbose_name="标签")
    desc = models.CharField(max_length=1024, verbose_name="摘要")
    content = models.TextField(verbose_name="正文")
    status = models.IntegerField(choices=STATUS_ITEMS, default=2, verbose_name="状态")
    created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = verbose_name_plural = '文章'

blog/admin.py

from django.contrib import admin

# Register your models here.

from .models import Category, Tag, Post

@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    list_display = ('name', 'status', 'owner', 'is_nav', 'post_count','created_time')
    fields = ('name','status','is_nav')

    def post_count(self,obj):
        return f"{obj.post_set.count()}篇文章"

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


@admin.register(Tag)
class TagAdmin(admin.ModelAdmin):
    pass


@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ('category', 'title', 'owner', 'status')
    exclude = ('owner',)

    actions_on_top = True  # 首页的按钮
    actions_on_bottom = True  # 首页的按钮

    save_on_top = True  # 编辑页面的按钮
    search_fields = ('title', 'category__name')

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

blog_config/Models.py

from django.db import models

from django.contrib.auth.models import User
# Create your models here.

class Link(models.Model):
    """友情链接"""
    STATUS_ITEMS = (
        (1,"正常"),
        (0, "删除"),
    )
    title = models.CharField(max_length=50, verbose_name="网站名称")
    href = models.URLField(verbose_name="链接")
    status = models.IntegerField(choices=STATUS_ITEMS, default=1, verbose_name="状态")
    owner = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="作者")
    created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
    weight = models.IntegerField(choices=zip(range(1,11), range(1,11)),default=1, verbose_name="权重")

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = verbose_name_plural ='友情链接'

class SideBar(models.Model):
    """侧边栏"""
    TYPE_ITEMS = (
        (1,"HTML"),
        (2, "最新文章"),
        (3, "最热文章"),
        (4, "最近评论"),
    )
    STATUS_ITEMS = (
        (1,"展示"),
        (0, "隐藏"),
    )
    title = models.CharField(max_length=50, verbose_name="标题")
    display_type = models.IntegerField(choices=TYPE_ITEMS, default=1, verbose_name="展示类型")
    status = models.IntegerField(choices=STATUS_ITEMS, default=1, verbose_name="状态")
    content = models.CharField(max_length=500, verbose_name="内容")
    owner = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="作者")
    created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")

    def __str__(self):
        return self.title

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

blog_config/admin.py

from django.contrib import admin

# Register your models here.
from  .models import Link,SideBar

@admin.register(Link)
class LinkAdmin(admin.ModelAdmin):
    pass

@admin.register(SideBar)
class SideBarAdmin(admin.ModelAdmin):
    pass

comments/models.py

from django.db import models
from blog.models import Post

# Create your models here.

class Comment(models.Model):
    """评论"""
    target = models.ForeignKey(Post, verbose_name="评论目标", on_delete=models.CASCADE)
    nickname = models.CharField(max_length=50, verbose_name="昵称")
    email = models.EmailField(verbose_name="邮箱")
    website = models.URLField(verbose_name="网站地址")
    content = models.TextField(verbose_name="评论内容")
    created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")

    def __str__(self):
        return f"{self.target} By {self.nickname}"

    class Meta:
        verbose_name = verbose_name_plural ='评论'

comments/admin.py

from django.contrib import admin
from .models import Comment

# Register your models here.
@admin.register(Comment)
class CommentAdmin(admin.ModelAdmin):
    pass

运行

python manage.py makemigrations
python manage.py migrate

进入管理后台

python manage.py createsuperuser

输入用户名和密码,进入管理主页

在这里插入图片描述

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值