项目流程:
1、搞清楚需求(产品经理)
(1)基于用户认证组件和Ajax实现登录验证(图片验证码)
(2)基于form组件和Ajax实现注册登录
(3)设计系统首页(文章列表渲染)
(4)设计个人站点页面
(5)文章详情页
(6)实现文章点赞功能
(7)实现文章评论;文章的评论、评论的评论
(8)富文本编辑框和放在xss攻击
扫描二维码关注公众号,回复:
1760261 查看本文章
2、设计表结构
3、按着每个功能进行开发
4、功能测试
5、项目部署上线
表关系和表结构
from django.db import models # Create your models here. from django.contrib.auth.models import User,AbstractUser #User就是user_info这个也继承了AbstractUser class UserInfo(AbstractUser): #用户认证组件,要用用户表;扩展字段,继承AbstractUser类, '''用户信息''' nid = models.AutoField(primary_key=True) telephone = models.CharField(max_length=11, null=True, unique=True) avatar = models.FileField(upload_to='avatars/', default="/avatars/default.png") create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True) blog = models.OneToOneField(to='Blog', to_field='nid', null=True,on_delete=models.CASCADE) def __str__(self): return self.username class Blog(models.Model): #用户和站点表是一对一的关系 '''博客信息表(站点表)''' nid = models.AutoField(primary_key=True) title = models.CharField(verbose_name='个人博客标题',max_length=64) site_name = models.CharField(verbose_name='站点名称',max_length=64) theme = models.CharField(verbose_name='博客主题',max_length=32) def __str__(self): return self.title class Category(models.Model): #分类和用户是一对多的关系,分类和站点应该也是一对多,可以通过某一个去找另外一个 '''博客个人文章分类表''' nid = models.AutoField(primary_key=True) title = models.CharField(verbose_name='分类标题', max_length=32) blog = models.ForeignKey(verbose_name='所属博客',to='Blog', to_field='nid',on_delete=models.CASCADE) def __str__(self): return self.title class Tag(models.Model): #跟分类表是一样的;一个用户可以创建多个标签,一个标签也只能属于一个站点,一个站点可以有多个标签 nid = models.AutoField(primary_key=True) title = models.CharField(verbose_name='标签名称',max_length=32) blog = models.ForeignKey(verbose_name='所属博客', to='Blog',to_field='nid',on_delete=models.CASCADE) def __str__(self): return self.title class Article(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField(max_length=50, verbose_name='文章标题') desc = models.CharField(max_length=255, verbose_name='文章描述') create_time = models.DateTimeField(verbose_name='创建时间',auto_now_add=True) content = models.TextField() comment_count = models.IntegerField(default=0) up_count = models.IntegerField(default=0) down_count = models.IntegerField(default=0) user = models.ForeignKey(verbose_name='作者',to='UserInfo',to_field='nid',on_delete=models.CASCADE) #文章和用户一对多 category = models.ForeignKey(to='Category', to_field='nid', null=True,on_delete=models.CASCADE) #多对一 分类和文章多对多 tags = models.ManyToManyField( #用了一个中介模型,创建第三张表 to="Tag", through='Article2Tag', through_fields=('article', 'tag'), ) def __str__(self): return self.title class Article2Tag(models.Model): #文章和标签的多对多 nid = models.AutoField(primary_key=True) article = models.ForeignKey(verbose_name='文章', to="Article", to_field='nid',on_delete=models.CASCADE) tag = models.ForeignKey(verbose_name='标签', to='Tag',to_field='nid',on_delete=models.CASCADE) class Meta: unique_together = [ ('article', 'tag'), ] def __str__(self): v = self.article.title + "---" + self.tag.title return v class ArticleUpDown(models.Model): '''点赞表''' nid = models.AutoField(primary_key=True) user = models.ForeignKey('UserInfo',null=True,on_delete=models.CASCADE) article = models.ForeignKey("Article",null=True,on_delete=models.CASCADE) is_up = models.BooleanField(default=True) class Meta: unique_together = [ ("article", 'user'), ] class Comment(models.Model): '''评论表''' nid = models.AutoField(primary_key=True) article = models.ForeignKey(verbose_name='评论文章', to='Article', to_field='nid',on_delete=models.CASCADE) user = models.ForeignKey(verbose_name='评论者',to='UserInfo', to_field='nid',on_delete=models.CASCADE) content = models.CharField(verbose_name='评论内容',max_length=255) create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True) parent_comment = models.ForeignKey('self', null=True,on_delete=models.CASCADE) #自己关联自己 def __str__(self): return self.content ''' 跟评论:对文章的评论;111 222 333 子评论:对评论的评论;444 555 Comment nid user_id article_id content parent_comment_id(null=True) 1 1 1 111 null 2 2 1 222 null 3 3 1 333 null 4 4 1 444 1 5 5 1 555 4 '''
settings里边
改成用mysql
DATABASES = { 'default':{ 'ENGINE':'django.db.backends.mysql', 'NAME':'cnblog',#要连接的数据库,连接前需创建好 'USER':'root',#连接数据库的用户名 'PASSWORD':'',#连接数据库的密码 'HOST':'127.0.0.1',#连接本机,默认本机 'PORT':'3306' #端口,默认3306 } }
把这个blog加上去。
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog', ]
应该先在mysql里边创建cnblog这个数据库再进行数据库迁移创建
mysql> create database cnblog; Query OK, 1 row affected (0.22 sec)
进行数据库迁移
python manage.py makemigrations
python manage.py migrate
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
如果提示你这个就 pip install mysqlclient下