django 博客开发

Posted X糊涂仙儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django 博客开发相关的知识,希望对你有一定的参考价值。

跟着大神的文章做下来的,良心佳作。跟随大神,略有改动。

https://www.django.cn/course/show-40.html

把过程写一遍,加强理解。虚拟环境需要使用python 3.5/6/7/8 ,django 2.1.1

1、创建项目与应用

在虚拟环境中创建项目与应用

激活虚拟环境
D:\\django_basic_venv\\Scripts>activate

查看django版本,如果环境不匹配直接pip install django==2.1.1安装
(django_basic_venv) D:\\django_basic_venv\\Scripts\\myblog2>python -c "import django; print(django.get_version())"
2.1.1

创建myblog2项目
D:\\django_basic_venv\\Scripts>django-admin.exe startproject myblog2

在myblog2下创建app blog
cd myblog2
python manage.py startapp blog

项目结构:
blog                #APP应用名和目录
│  admin.py        #对应应用后台管理配置文件。
│  apps.py         #对应应用的配置文件。
│  models.py       #数据模块,数据库设计就在此文件中设计。后面重点讲解
│  tests.py        #自动化测试模块,可在里面编写测试脚本自动化测试
│  views.py        #视图文件,用来执行响应代码的。你在浏览器所见所得都是它处理的。
│  __init__.py
│
├─migrations        #数据迁移、移植文目录,记录数据库操作记录,内容自动生成。
│  │  __init__.py
myblog2               #项目配置目录
│  __init__.py       #初始化文件,一般情况下不用做任何修改。
│  settings.py        #项目配置文件,具体如何配置后面有介绍。
│  url.py             #项目URL设置文件,可理解为路由,可以控制你访问去处。
│  wsgi.py          #为Python服务器网关接口,是Python与WEB服务器之间的接口。
myblogvenv            #Pycharm创建的虚拟环境目录,和项目无关,不需要管它。
templates           #项目模板文件目录,用来存放模板文件
manage.py     #命令行工具,通过可以与项目与行交互。在终端输入python manege.py help,可以查看功能。

2、基础配置

基础配置分别为:

  1. 允许所有机器访问
  2. template目录添加
  3. blog app应用注册
  4. 修改时区和语言
  5. 在项目目录添加media 和static (用于CSS和JS图片资源)
  6. 使用mysql数据库(保证可以连接到mysql)
    
    vim myblog2/settings.py
    #允许所有机器访问
    ALLOWED_HOSTS = [\'*\']
    #增加app
    INSTALLED_APPS = [
    \'django.contrib.admin\',
    \'django.contrib.auth\',
    \'django.contrib.contenttypes\',
    \'django.contrib.sessions\',
    \'django.contrib.messages\',
    \'django.contrib.staticfiles\',
    \'blog.apps.BlogConfig\',    #add, 注册app应用 blog
    ]
    #templates修改
    TEMPLATES = [
    {
        \'BACKEND\': \'django.template.backends.django.DjangoTemplates\',
        #\'DIRS\': [],
        \'DIRS\': [os.path.join(BASE_DIR, \'templates\')],   #新增内容
        \'APP_DIRS\': True,
        \'OPTIONS\': {
            \'context_processors\': [
                \'django.template.context_processors.debug\',
                \'django.template.context_processors.request\',
                \'django.contrib.auth.context_processors.auth\',
                \'django.contrib.messages.context_processors.messages\',
            ],
        },
    },
    ]
    #\'DIRS\': [os.path.join(BASE_DIR, \'templates\')], 注解:
    BASE_DIR 是manage.py文件所在路径
    os.path.join()函数把两个或者多个路径拼接为一个路径,第一个位置参数是第一个路径,后面代表路径组件的可变参数。执行完,拼接好的路径返回

#时间和语言
LANGUAGE_CODE = \'zh-hans\' #中文支持

TIME_ZONE = \'Asia/Shanghai\' #改为上海

USE_I18N = True

USE_L10N = True

USE_TZ = True

#静态资源添加
设置静态文件夹目录的路径
STATICFILES_DIRS = [(os.path.join(BASE_DIR, \'static\'))]
#设置文件上传路径,图片上传、文件上传都会存放在此目录里
MEDIA_URL = \'/media/\'
MEDIA_ROOT = os.path.join(BASE_DIR, \'media\')

#数据库配置
DATABASES = {
\'default\': {
\'ENGINE\': \'django.db.backends.mysql\', #使用mysql数据库
\'NAME\': \'blog\',
\'USER\': \'root\',
\'PASSWORD\': \'xxxxxx\',
\'HOST\': \'192.168.1.192\',
\'PORT\': \'3306\',
}
}

### 3、创建欢迎页面
打开terminal页面并执行同步数据库命令如下:

python manage.py makemigrations
python manage.py migrate

进入数据库查看表

mysql> show tables;
+----------------------------+
| Tables_in_blog |
+----------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| blog_article |
| blog_article_tags |
| blog_banner |
| blog_category |
| blog_link |
| blog_tag |
| blog_tui |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+----------------------------+
17 rows in set (0.01 sec)

访问测试页面

python manage.py runserver
http://127.0.0.1:8000/ #出现飞天火箭

制作helloworld访问页面

#编缉urls.py ,页面接收
myblog2/blog/urls.py

from django.contrib import admin
from django.urls import path
from blog import views #从应用blog导入视图
urlpatterns = [
path(\'admin/\', admin.site.urls),
path(\'\', views.hello), #hello
]
#编缉应用视图
vim myblog2/blog/views.py

from django.http import HttpResponse
def hello(request):
return HttpResponse(\'欢迎使用Django!\')

#访问admin页面

python manage.py createsuperuser
admin/admin
http://127.0.0.1:8000/admin #可以直接登陆进入页面

### 4、创建数据库模型
以下内容可参考,我是先做出结果后再理解

分类表结构设计:
表名:Category、分类名:name
标签表设计:
表名:Tag、标签名:name
文章表结构设计:
表名:Article、标题:title、摘要:excerpt、分类:category、标签:tags、推荐位、内容:body、创建时间:created_time、作者:user、文章封面图片img
幻灯图表结构设计:
表名:Banner、图片文本text_info、图片img、图片链接link_url、图片状态is_active。
推荐位表结构设计:
表名:Tui、推荐位名name。
友情链接表结构设计:
表名:Link、链接名name、链接网址linkurl。
其中:
文章和分类是一对多的关系,文章和标签是多对多的关系,文章和作者是一对多的关系,文章和推荐位是一对多关系(看自己的需求,也可以设计成多对多)。

#编缉应用中的模型
vim blog/models.py(从pycharm中复制内容)

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

Create your models here.

class Category(models.Model):
name = models.CharField(\'博客分类\',max_length=100)
index = models.IntegerField(default=999,verbose_name=\'分类排序\')

class Meta:
    verbose_name = \'博客分类\'
    verbose_name_plural = verbose_name

def __str__(self):
    return self.name

#文章标签

class Tag(models.Model):
name = models.CharField(\'文章标签\',max_length=100)
class Meta:
verbose_name = \'文章标签\'
verbose_name_plural = verbose_name

def __str__(self):
    return self.name

#推荐位
class Tui(models.Model):
name = models.CharField(\'推荐位\', max_length=100)

class Meta:
    verbose_name = \'推荐位\'
    verbose_name_plural = verbose_name

def __str__(self):
    return self.name

#文章
class Article(models.Model):
title = models.CharField(\'标题\',max_length=70)
excerpt = models.TextField(\'摘要\',max_length=200,blank=True)
category = models.ForeignKey(Category,on_delete=models.DO_NOTHING,verbose_name=\'分类\',blank=True,null=True)
#使用外键关联分类表与分类是一对多关系
tags = models.ManyToManyField(Tag,verbose_name=\'标签\',blank=True)
#使用外键关联标签表与分类是一对多关系
img = models.ImageField(upload_to=\'article_img/%Y/%m/%d\',verbose_name=\'文章图片\',blank=True,null=True)
body = models.TextField()
user = models.ForeignKey(User, on_delete=models.CASCADE,verbose_name=\'作者\')
views = models.PositiveIntegerField(\'阅读量\',default=0)
tui = models.ForeignKey(Tui, on_delete=models.DO_NOTHING,verbose_name=\'推荐位\', blank=True,null=True)

created_time = models.DateTimeField(\'发布时间\', auto_now_add=True)
modified_time = models.DateTimeField(\'修改时间\', auto_now=True)

class Meta:
    verbose_name = \'文章\'
    verbose_name_plural = \'文章\'

def __str__(self):
    return self.title

#banner
class Banner(models.Model):
text_info = models.CharField(\'标题\', max_length=50, default=\'\')
img = models.ImageField(\'轮播图\', upload_to=\'banner/\')
link_url = models.URLField(\'图片链接\', max_length=100)
is_active = models.BooleanField(\'是否active\', default=False)

def __str__(self):
    return self.text_info

class Meta:
    verbose_name = \'轮播图\'
    verbose_name_plural = \'轮播图\'

#友情链接
class Link(models.Model):
name = models.CharField(\'链接名称\', max_length=20)
linkurl = models.URLField(\'网址\', max_length=100)

def __str__(self):
    return self.name

class Meta:
    verbose_name = \'友情链接\'
    verbose_name_plural = \'友情链接\'
#同步数据到mysql

1、执行
D:\\django_basic_venv\\Scripts\\myblog2>python manage.py makemigrations
Migrations for \'blog\':
blog\\migrations\\0001_initial.py

  • Create model Article
  • Create model Banner
  • Create model Category
  • Create model Link
  • Create model Tag
  • Create model Tui
  • Add field category to article
  • Add field tags to article
  • Add field tui to article
  • Add field user to article
    2、执行
    D:\\django_basic_venv\\Scripts\\myblog2>python manage.py migrate
    ......未纪录下
    
    ### 5、admin 管理数据后台
    注册APP应用之后,我们想要在admin后台里对数据库表进行操作,我们还得在应用APP下的admin.py文件里对数据库表先进行注册。我们的APP应用是blog,所以我们需要在blog/admin.py文件里进行注册:
    vim blog/admin.py
    ```from django.contrib import admin
    from .models import Banner, Category, Tag, Tui, Article, Link
    from blog.models import Banner, Category, Tag, Tui, Article, Link
    # Register your models here.

#导入需要管理的数据库表br/>@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = (\'id\', \'category\', \'title\', \'tui\', \'user\', \'views\', \'created_time\')

文章列表里显示想要显示的字段

list_per_page = 50
#满50条数据就自动分页
ordering = (\'-created_time\',)
#后台数据列表排序方式
list_display_links = (\'id\',\'title\')
#设置哪些字段可以点击进入编缉界面

@admin.register(Banner)
class BannerAdmin(admin.ModelAdmin):
list_display = (\'id\', \'text_info\', \'img\', \'link_url\', \'is_active\')

@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
list_display = (\'id\', \'name\', \'index\')

@admin.register(Tag)
class TagAdmin(admin.ModelAdmin):
list_display = (\'id\', \'name\')

@admin.register(Tui)
class TuiAdmin(admin.ModelAdmin):
list_display = (\'id\', \'name\')

@admin.register(Link)
class LinkAdmin(admin.ModelAdmin):
list_display = (\'id\', \'name\', \'linkurl\')


### 6、访问管理平台
![image.png](https://s2.51cto.com/images/20210929/1632931031470804.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

以上是关于django 博客开发的主要内容,如果未能解决你的问题,请参考以下文章

推荐net开发cad入门阅读代码片段

Django 博客开发教程 12 - 评论

Django 博客开发教程 12 - 评论

2.建立 Django 博客应用

django-开发博客2

Django 博客开发教程 15 - 使用 Fabric 自动化部署