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、基础配置
基础配置分别为:
- 允许所有机器访问
- template目录添加
- blog app应用注册
- 修改时区和语言
- 在项目目录添加media 和static (用于CSS和JS图片资源)
- 使用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.
文章列表里显示想要显示的字段
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 博客开发的主要内容,如果未能解决你的问题,请参考以下文章