django 项目试炼blog(1)

  1、确定表结构

from django.contrib.auth.models import AbstractUser

class UserInfo(AbstractUser):
    """
    用户信息表, 继承session生成的auth_user表
    需要在setting中加入 AUTH_USER_MODEL = ‘app01.UserInfo‘
    """
    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 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 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 Article(models.Model):
    """博客文章"""
    nid = models.AutoField(primary_key=True)
    title = models.CharField(verbose_name=‘文章标题‘, max_length=50)
    desc = models.CharField(verbose_name=‘文章秒速‘, max_length=255)
    create_time = models.DateTimeField(verbose_name=‘创建时间‘, auto_now_add=True)
    content = models.TextField()

    comment_count = models.IntegerField(default=0)  #评论数默认为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)
    tag = 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):
    """点赞表,用户1对文章2进行了T操作"""

    nid = models.AutoField(primary_key=True)
    user = models.ForeignKey(to=‘UserInfo‘, to_field=‘nid‘, null=True, on_delete=models.CASCADE)
    article = models.ForeignKey(to=‘Article‘, to_field=‘nid‘, 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)
    content = models.CharField(verbose_name=‘评论内容‘, max_length=255)
    create_time = models.DateTimeField(verbose_name=‘创建时间‘, auto_now_add=True)  # 当前时间

    article = models.ForeignKey(verbose_name=‘评论文章‘, to=‘Article‘,to_field=‘nid‘, on_delete=models.CASCADE)
    user = models.ForeignKey(to=‘UserInfo‘, to_field=‘nid‘, null=True, on_delete=models.CASCADE)

    parent_comment = models.ForeignKey(‘self‘,null=True,on_delete=models.CASCADE)  #建立评论树

    def __str__(self):
        return self.content


2、重点内容:

  想在session自建表auth-user表中增加字段,需要继承AbstractUser来实现,并且需要在项目配置文件中加入  AUTH_USER_MODEL = ‘应用名.表名‘

    评论表表中的树结构

  

原文地址:https://www.cnblogs.com/zhuzhiwei-2019/p/10733547.html

时间: 2024-08-30 14:06:47

django 项目试炼blog(1)的相关文章

Django 项目试炼blog(8) -- 评论树的显示

Views def get_tree_data(request): article_id = request.GET.get('article_id') send_data = list(Comment.objects.filter(article_id=article_id).values('pk','content','parent_comment_id')) return JsonResponse(send_data,safe=False) ORM生成的的是queryset对象,而非真正的

Django 项目试炼blog(10) --补充 滑动验证码

首先安装一个需要用到的模块 pip install social-auth-app-django 安装完后在终端输入pip list会看到 social-auth-app-django 3.1.0 social-auth-core 3.0.0 然后可以来我的github,下载关于滑动验证码的这个demo:https://github.com/Edward66/slide_auth_code 下载完后启动项目 python manage.py runserver 启动这个项目后,在主页就能看到示例

Django 项目试炼blog(6) -- 文章详情页1 -- 点赞功能

url #文章详情页 re_path(r'(?P<username>\w+)/article/(?P<article_id>\d+)/$',views.article), # 点赞 path('up_down/', views.up_down), views from django.db.models import F def up_down(request): sign = request.POST.get('sign') sign = json.loads(sign) # 前端

Django 项目试炼blog(7) -- 文章详情页2 -- 前端样式的继承与楼评论显示

views from django.db import transaction def comment(request): article_id = request.POST.get('article_id') content = request.POST.get('content') pid = request.POST.get('parent_id') #事务操作 生成评论,文章数据中评论总数自动+1(同时执行) with transaction.atomic(): comm_obj = C

Django 项目试炼blog(9) -- 文本编辑器的使用(文件存储,预览)

HTML <div class="col-md-9"> <div> <p class="text-center" style="background-color: #e5eef7;font-size: 18px" >添加文章</p> <form action="" method="post" style="margin-top: 40px&qu

jdango 项目试炼blog(3)--基于Form组件ajax用户注册

1.利用form组件建立form组件 from app01.models import UserInfo from django import forms from django.forms import widgets from django.core.exceptions import ValidationError class UserFrom(forms.Form): #固定格式 user = forms.CharField(max_length=32,label='用户名', # 设置

Django项目导入Eclipse运行调试

受不了没有调试的感觉. 前提是Eclipse插件已经安装完成并且可以成功运行例子.参考:http://blog.csdn.net/jerome_s/article/details/46340079 1. 新建一个"Pydev Project"项目 2. project contents选择要导入的项目的路径 (如果有提示多余文件什么的可进入目录删除对应文件即可) 3. 将项目设置为django项目 右击项目 4. 设置项目manage.py 右击项目属性 5. 运行 右击项目debug

异步任务利器Celery(二)在django项目中使用Celery

Celery 4.0支持django1.8及以上的版本,低于1.8的项目使用Celery 3.1. 一个django项目的组织如下: - proj/ - manage.py - proj/ - __init__.py - settings.py - urls.py 首先建立proj/proj/celery.py文件: from __future__ import absolute_import, unicode_literals import os from celery import Cele

mac osx 上面部署Django项目 apache+mysql+mod_wsgi

1.安装Xcode command line tools 首先,编译mysql和Homebrew需要用到Xcode command line tools,所以首先安装command line tools: 如果安装了Xcode,只需要“Preferences… > Downloads”,之后点击Command Line Tools安装按钮: 如果没有Xcode,去https://developer.apple.com/downloads,搜索Command Line Tools 下载安装 2.安