这个项目就是做一个博客的简单页面,首先是对环境的搭建;
1.创建虚拟环境的基本步骤
(1)创建虚拟环境-virtualenv
pip install virtualenv
(2)在D盘下新建目录python-virtualenv 用来存放python虚拟环境 (这个路径一定要记住,不要与其它路径的东西放在一起了,容易出错)。
(3)创建虚拟环境
# virtualenv 环境的名称
virtualenv django-1.11.28-blog
(4)激活虚拟环境
进入到刚刚创建的虚拟环境路径里的Scripts文件夹中;
cd D:\python-virtualenv\django-1.11.28-blog\Scripts
接着运行activate,显示如下结果即可;
(django-1.11.28-blog) D:\python-virtualenv\django-1.11.28-blog\Scripts>
(5)在虚拟环境下安装所需要的安装包
pip install django==1.11.28
(6)退出虚拟环境:deactivate
2.项目创建的基本步骤及Git版本控制
(1)PyCharm创建django项目
可通过以下两种方式去创建项目:
图形化:new Project->django->选择项目文件夹目录->选择虚拟环境目录
命令式:命令行输入django-admin startproject django-blog
项目目录:
---django-blog
--- __init__.py
---settings.py
---urls.py
---wsgi.py
---templates
---manage.py
(2)项目中配置settings.py
首先需要在djangoProject/djangoProject目录下创建本地配置文件local_settings.py(如若要对settings.py中的内容进行修改,将其复制到local_settings.py下进行修改);
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
在settings.py中引入本地的配置(这里可以直接在settings.py中修改,配置后上下线都可使用);
# 引入本地配置
try:
from .local_settings import *
except:
pass
(3)版本控制
下载与安装 Git
首先需要下载该软件,官网下载如下:https://git-scm.com/download/win;
安装时只需要“傻瓜式”地点击“Next”即可安装成功;
PyCharm中配置 Git
打开PyCharm后,选中File-->Settings,在Settings中输入Git,点击Git并配置好路径(该路径在刚刚安装Git路径中的bin/git.exe文件;
完成上述操作后,则表示PyCharm已成功配置Git。
下载安装 Gitee
在Settings中找到Plugins,在界面中找到"Browser reponsitories..."并点击进入,并在搜索框中输入“gitee”,然后选中Gitee-->Install;
安装成功后,需要点击“Restart”重启PyCharm后即可生效。
配置码云账户和密码
先在官网中注册Gitee的账号,若已经注册好的,输入信息并登录配置,下面是基本操作步骤;
(1)在Settings输入gitee,可以查看到上述操作中已成功安装的Gitee插件。第一次配置时要点击“Create API Token”完成用户登录,点击Login后会生成密钥;
(2)若要验证账号是否能与服务器正常通信时,可点击“Test”测试;
3.Git命令的基本使用
先在码云中创建仓库,以便后续命令的使用;
首先打开PyCharm后,选中VCS-->Import into Version Control -->Share Project on Gitee,选择完后需填写一些项目内容如下;
选中分享后,则需要选中要添加的项目文件项(每次提交的时候可以编写提交版本的信息);
django-blog # 在码云中创建的仓库名
--git init # 初始化本地仓库
--git add . # 将当前文件夹下面的所有文件虚拟到仓库中
--git commit -m '初始化博客项目' # 提交到本地仓库
--git remote add origin https://gitee.com/amyliyanice/django-blog.git #本地仓库和远程仓库的连接
--git push -u origin master # 将本地仓库的内容推向远程仓库
==========================================================================================
git pull 远程仓库的地址 # 将线上分支拉到本地
git rm -r --cached . # 需要将本地的提交缓存刷新一下,重新提交
这里因为版本的问题,使用图形化方式进行提交并将内容推向远程仓库;
首先选中VCS-->Commit,选中要提交的目录及文件项,同时可编写相关信息,最后点击“Commit”即可;
此时,还需要将本地仓库推送到远程仓库中,选中VCS-->Git-->Push,当Push Success后,进入到gitee服务器中,可进行查看;
4.项目应用的创建
(1)使用mysql,修改数据库
首先安装pymysql,在local_settings.py中配置mysql;
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dblog',
'USER': 'root',
'PASSWORD': '112233',
'HOST': 'localhost',
'PORT': 3306
}
}
这里使用Navicate创建数据库dblog,在主目录下的__init__.py中配置pymysql;
import pymysql
pymysql.install_as_MySQLdb()
(2)创建应用,使用models创建表
首先创建ar_type 、article 应用:
>>>python manage.py startapp ar_type # ar_type 类型应用
>>>python manage.py startapp article # article 文章应用
在创建应用后,在settings.py中进行注册;
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'ar_type', # 添加
'article', # 添加
]
由于每一张表中都有is_delete、create_time和update _time,因此我们直接在项目根目录下创建一个db文件夹存放基类,在db文件夹下创建baseModel.py;
from django.db import models
class BaseModel(models.Model):
# 模型基类
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
is_delete = models.BooleanField(default=False, verbose_name='删除标记')
showorder = models.IntegerField(default=0, verbose_name='排列序号')
class Meta:
abstract = True
在每个应用的models中引入基类,使该应用的模型类继承该基类;
# ar_type/models.py:
from django.db import models
from db.baseModel import BaseModel
# Create your models here.
class ArType(BaseModel):
name = models.CharField(max_length=10,verbose_name='类型名称')
def __str__(self):
return self.name
class Meta:
db_table = 'ar_type'
verbose_name_plural = '类型'
# article/models.py:
from django.db import models
from db.baseModel import BaseModel
from ar_type.models import ArType
# Create your models here.
from tinymce.models import HTMLField
class Article(BaseModel):
name = models.CharField(max_length=200, verbose_name='文章标题')
post_img = models.ImageField(upload_to='poster', verbose_name='封面图片') # 图片存放在media/poster目录下
author = models.CharField(max_length=20, verbose_name='作者名')
desc = models.TextField(verbose_name='文章简介')
content = models.TextField(verbose_name='文章内容')
view_num = models.IntegerField(default=0, verbose_name='浏览人数')
zan_num = models.IntegerField(default=0,verbose_name='点赞人数')
type = models.ForeignKey(ArType, verbose_name='文章类型')
class Meta:
db_table = 'article'
verbose_name_plural = '文章'
生成数据库及迁移;
python manage.py makemigrations
python manage.py migrate
常见错误的处理方法:
①创建引用报错:
报错:TypeError: unsupported operand type(s) for /: 'str' and 'str'
修改:settings.py中的TEMPLATES配置
'DIRS': [BASE_DIR,'templates'],
修改为:
'DIRS': [os.path.join(BASE_DIR,'templates')],
②数据库生成报错:
报错:Cannot use ImageField because Pillow is not installed
解决:pip install Pillow
5.后台用户和界面处理
这里先创建用户:python manage.py createsuperuser
在每个应用的admin.py中注册模板,在后台显示;
# ar_type应用中的admin.py
from django.contrib import admin
from .models import *
# Register your models here.
class ArTypeAdmin(admin.ModelAdmin):
list_display = ['id','name','showorder','create_time']
list_per_page = 10
list_display_links = ['name']
list_editable = ['showorder']
admin.site.register(ArType,ArTypeAdmin)
# article应用中的admin.py
from django.contrib import admin
from .models import *
class ArticalAdmin(admin.ModelAdmin):
list_display = ['id','name','author','post_img','desc','content','view_num','zan_num','showorder']
list_display_links = ['name']
list_editable = ['view_num','zan_num','showorder']
# Register your models here.
admin.site.register(Article,ArticalAdmin)
这里还要注意后台上传图片的配置,在settings.py中配置上传图片的路径;
# 指定上传资源的访问路径
MEDIA_URL = '/media/'
# 上传资源的存储路径
MEDIA_ROOT = os.path.join(BASE_DIR,"static/media")
在主路由中指定访问路由;
from django.conf.urls.static import static
from djangoProject import settings
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
之后访问后台,进行数据添加,效果如下: