本文共 5423 字,大约阅读时间需要 18 分钟。
博客系统核心模块有:
需要数据库,本次使用Mysql 5.5, InnoDB引擎。需要支持多用户登录,各自可以管理自己的博文(增删改查),管理是不公开的,但是博文是不需要登录就可以公开浏览的。
创建数据库:create database if not exists blog;
用户表user:
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(48) NOT NULL, `email` varchar(64) NOT NULL, `password` varchar(128) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
文章表post:
一对多关系:一篇博文属于一个作者,一个作者有多篇博文。如何设计?
content字段的设计:
图片来源有2种:
本次博客项目不实现图片功能。
CREATE TABLE `post` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `title` varchar(256) NOT NULL, `author_id` int(11) NOT NULL, `postdate` datetime NOT NULL, PRIMARY KEY (`id`), KEY `author_id` (`author_id`), CONSTRAINT `fk_post_user` FOREIGN KEY (`author_id`) REFERENCES `user` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `content` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `content` text NOT NULL, PRIMARY KEY (`id`), CONSTRAINT `fk_content_post` FOREIGN KEY (`id`) REFERENCES `post` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
本次使用Django 1.11版本,它也是长期支持版本LTS,请在虚拟环境中安装。在虚拟环境路径中,Lib/site-packages/django/bin下有一个django-admin.py,一起从它开始。$ pip install django==1.11.20
创建django项目:$ django-admin startproject blog .
在pycharm中的terminal中窗口中创建blog项目;上句命令就在当前项目根目录中构建了Django项目的初始文件。 点 代表项目根目录。
重要文件说明:
数据库配置:
使用数据库,需要修改默认的数据库配置。在主项目的settings.py下的DATABASES。默认使用的sqlite,修改为mysql。
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'blog', 'USER': '用户名', 'PASSWORD': '密码', 'HOST': '192.168.171.128', 'PORT': '3306', }}
Django支持MySQL 5.5+;Django官方推荐使用本地驱动mysqlclient 1.3.7 +
$ pip install mysqlclient
创建用户应用 $ python manage.py startapp user
创建应用后,项目根目录下产生一个user目录,有如下文件:
该应用完成以下功能 :用户注册、登录;
注册应用:
在settings.py中,增加user应用。目的是为了后台管理admin使用,或迁移migrate使用。
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'user', 'post',]
模型Model:
字段类型:
缺省主键:
缺省情况下,Django的每一个Model都有一个名为id的AutoField字段,如果显式定义了主键,这种缺省主键就不会被创建了。Python之禅中说“显式优于隐式”,所以,尽量使用自己定义 的主键,哪怕该字段名就是id,也是一种不错的选择。
字段选项:
关系类型字段类:
一对多时,自动创建会增加_id后缀。
访问id,对象.属性_id
from django.db import models# Create your models here.class User(models.Model): class Meta: db_table = 'user' id = models.AutoField(primary_key=True) name = models.CharField(max_length=48, null=False) email = models.CharField(max_length=64, unique=True, null=False) password = models.CharField(max_length=128, null=False) def __repr__(self): return "".format(self.id, self.name, self.email, self.password) __str__ = __repr__
注意修改过Model类就需要重新迁移,然后migrarte,迁移文件的序列号会增加。
另外:迁移的应用必须在settings.py的INSTALLED_APPS中注册。 不要随便删除这些迁移文件,因为后面的改动都是要依据这些迁移文件的。
$ manage.py createsuperuser
填写基本信息:管理员用户名:admin;密码:*************
settings.py中设置语言、时区;语言名称可以查看 django\contrib\admin\locale 目录
# LANGUAGE_CODE = 'en-us'LANGUAGE_CODE = 'zh-Hans' # 中文# TIME_ZONE = 'UTC'TIME_ZONE = 'Asia/Shanghai'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = True
$ python manage.py runserver, 默认端口是8000
后台登录地址 http://127.0.0.1:8000/admin
在user应用的admin.py添加
from django.contrib import adminfrom .models import User# Register your models here.admin.site.register(User) # 注册
路由功能就是实现URL模式匹配和处理函数之间的映射。路由配置要在项目的urls.py中配置,也可以多级配置,在每一个应用中,建立一个urls.py文件配置路由映射。
url函数 :
from django.conf.urls import url, includefrom django.contrib import adminfrom django.http import HttpRequest # , HttpResponse # , JsonResponse# from django.template import loaderfrom django.shortcuts import renderimport datetimedef index(request: HttpRequest): """视图函数:请求进来返回响应""" new_dict = { 'a': 100, 'b': 0, 'c': list(range(10, 20)), 'd': 'abc', 'date': datetime.datetime.now(), 'f': list(range(1, 10)) } context = {'content': 'www.magedu.com', 'new_dict': new_dict} return render(request, 'index.html', context)urlpatterns = [ url(r'^admin/', admin.site.urls), # url在 2.x版本 re_path url(r'^$', index),]
url(r'^index/$', index) : http://127.0.0.1:8000/index/ 可以访问 ;http://127.0.0.1:8000/index 可以访问,但会补一个/
url(r'^index$', index) :http://127.0.0.1:8000/index 可以访问 ;http://127.0.0.1:8000/index/ 不可以访问
转载地址:http://qvfvi.baihongyu.com/