IDE: Pycharm 数据库:MySQL5.7 管理工具:SQLyog
操作系统:windows10 Python版本:3.6 django版本:1.10 版本管理工具: virtualenv
E:\pylenv>virtualenv cms
Using base prefix 'e:\\anaconda3'
New python executable in E:\pylenv\cms\Scripts\python.exe
Installing setuptools, pip, wheel...done.
E:\pylenv\cms\Scripts>activate.bat
(cms) E:\pylenv\cms\Scripts>pip install django
Collecting django
Downloading Django-1.11.7-py2.py3-none-any.whl (6.9MB)
100% |████████████████████████████████| 7.0MB 11kB/s
Collecting pytz (from django)
Using cached pytz-2017.3-py2.py3-none-any.whl
Installing collected packages: pytz, django
Successfully installed django-1.11.7 pytz-2017.3
若下载缓慢,可换安装源
(cms) E:\pylenv\cms\Scripts>pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django
https://pypi.tuna.tsinghua.edu.cn/simple清华大学的pip源
使用Tools-Run manage.py Task ——>输入
startapp cms
创建APP
在setting注册APP
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'cms',
]
创建CMS数据库并在setting.py中配置Mysql
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'cms',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
Python3.X连接MySQL需要安装pymysql包:
(cms) E:\PycharmProjects\django_cms>pip install pymysql
Collecting pymysql
Using cached PyMySQL-0.7.11-py2.py3-none-any.whl
Installing collected packages: pymysql
Successfully installed pymysql-0.7.11
在django_cms/__init__.py
中配置pymysql
import pymysql
pymysql.install_as_MySQLdb()
在构建数据模型前需要先分析项目需求。
cms(Content Management System内容管理系统) 这个项目主要功能:
- 文章的呈现:包括标题,内容,作者,评论,赞同数,收藏数。
- 注册用户信息:昵称,邮箱,密码,简介,收藏了的文章,赞同了的文章,评论了的文章。
我们允许用户对一篇文章多次评论;但点赞和收藏的操作一篇文章只能进行一次,为了实现这一点,需要知道每篇文章和每个用户的对应关系(是否已点赞,是否已收藏)。
我们创建用户和文章,评论三个数据模型,让用户和文章关联成多对多的关系,从而判断用户是否已经收藏了某篇文章,另外创建一个点赞的数据模型,来判断用户是否已经赞同过某篇文章。
在cms/models.py中完成模型字段的设计,并完成数据库的生成。
from django.db import models
from django.contrib.auth.models import AbstractUser
class UserProfile(AbstractUser):<!--继承AbstractUer类,拓展字段。需要在setting.py中声明AUTH_USER_MODEL = 'cms.UserProfile'-->
...
class Category(models.Model):
...
class Article(models.Model):
...
class Comment(models.Model):
...
class Poll(models.Model):
...
class Keep(models.Model):
...
manage.py@django_cms > makemigrations<!--makemigration让django确定该如何修改数据库,记录并输出一个迁移文件-->
manage.py@django_cms > migrate<!--真正的操作数据库文件,生产对应的表-->
django的admin模块可以方便我们管理数据库,实现类似数据库客户端的功能,对数据进行增删改查。
manage.py@django_cms > createsuperuser
我们还可以使用xadmin来替换admin,xadmin具有更友好,更强大的管理功能。xadmin
1、pip install xadmin
orpip install git+git://github.com/sshwsfc/xadmin.git
2、源码安装,从github上下载源码下来放进项目中,并安装目录下有一个requirements.txt
文件
源码安装方便后期拓展插件,所以本项目使用源码安装。
在项目的根目录下创建一个文件夹extra_apps,将xadmin源码包中的'xadmin'文件夹复制到刚才的extra_apps中,把extra_apps Mark as Sources文件夹,在settings.py中添加sys.path.insert(0, os.path.join(BASE_DIR, 'extra_apps'))
取出xadmin-master\requirements.txt
文档
安装(cms) E:\PycharmProjects\django_cms\extra_apps>pip install -r requirements.txt
在APPS中添加
INSTALLED_APPS = [
...
'xadmin',
'crispy_forms',
'reversion',
]
中文支持
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False
在urls.py
配置中替换
import xadmin
urlpatterns = [
# url(r'^admin/', admin.site.urls),
url(r'^xadmin/', xadmin.site.urls),
]
对数据库进行迁移
manage.py@django_cms > makemigrations
manage.py@django_cms > migrate
启动项目后,使用超级用户登陆,即可看到xadmin的界面
在app中创建adminx.py文件,对model进行注册
import xadmin
from .models import Category, Article, Comment, Poll, Keep
class ArticleAdmin(object):
list_display = ...
list_filter = ...
search_fields = ...
...
xadmin.site.register(Article, ArticleAdmin)
这里使用bootstrap构建一套前端页面,bootstrap是由Twitter推出的一个用于前端开发的开源工具包,可以方便快捷的给不熟悉前端页面设计的工程师迅速的构建前端页面。
这里执行编写视图函数-配置URL-页面配置的流程
from django.shortcuts import render
from django.views.generic.base import View
class IndexView(View):
def get(self, request):
return render(request, 'index.html')
在APP的views.py文件种编写,使用类方法编写
from django.conf.urls import url
from cms.views import IndexView
urlpatterns = [
...
url(r'^$', IndexView.as_view(), name='index'),
]
在urls.py文件中引入试图函数并配置URL
在项目下创建static文件夹,把`css、fonts、js`文件夹放在其中,并在settings.py中配置
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
{% load staticfiles %}
<link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet">
<script src="{% static 'js/jquery-3.2.1.min.js' %}"></script>
<script src="{% static 'js/bootstrap.min.js' %}"></script>