django BBS project

1、models

from django.db import models

# Create your models here.

from django.contrib.auth.models import User, AbstractUser

class UserInfo(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")
    # auto_now_add=True
    ‘‘‘
    auto_now_add
    配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库。
    auto_now
    配置上auto_now=True,每次更新数据记录的时候会更新该字段。
    ‘‘‘
    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):
    """
    博主个人文章分类表a
    """
    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)
    user = models.ForeignKey(verbose_name=‘评论者‘, to=‘UserInfo‘, to_field=‘nid‘, on_delete=models.CASCADE)
    article = models.ForeignKey(verbose_name=‘评论文章‘, to=‘Article‘, to_field=‘nid‘, on_delete=models.CASCADE)
    create_time = models.DateTimeField(verbose_name=‘创建时间‘, auto_now_add=True)
    content = models.CharField(verbose_name=‘评论内容‘, max_length=255)

    parent_comment = models.ForeignKey("self", null=True, on_delete=models.CASCADE)

    def __str__(self):
        return self.content

2、views

from django.shortcuts import render,HttpResponse

# Create your views here.

from django.contrib import auth
def login(request):

    if request.is_ajax():
        name=request.POST.get(‘name‘)
        pwd=request.POST.get(‘pwd‘)
        code=request.POST.get(‘code‘)

        if code.upper()== request.session[‘code‘].upper():
            user=auth.authenticate(request,username=name,password=pwd)
            if user:
                return HttpResponse(‘ok‘)
            else:
                return HttpResponse(‘用户名或密码错误‘)
        else:
            return HttpResponse(‘验证码错误‘)

    return render(request,‘login.html‘)

def get_random_color():
    import random
    return (random.randint(0,255),random.randint(0,255),random.randint(0,255))

def get_code(request):
    import random
    # with open(‘static/img/lhf.jpg‘,‘rb‘) as f:
    #     data=f.read()
    # pip3 install pillow
    from PIL import Image, ImageDraw, ImageFont
    from io import BytesIO
    import random
    img = Image.new("RGB", (270, 40), color=get_random_color())

    draw = ImageDraw.Draw(img)
    kumo_font = ImageFont.truetype("static/font/kumo.ttf", size=32)

    valid_code_str = ""
    for i in range(5):
        random_num = str(random.randint(0, 9))
        random_low_alpha = chr(random.randint(95, 122))
        random_upper_alpha = chr(random.randint(65, 90))
        random_char = random.choice([random_num, random_low_alpha, random_upper_alpha])
        draw.text((i * 50 + 20, 5), random_char, get_random_color(), font=kumo_font)

        # 保存验证码字符串
        valid_code_str += random_char

    print("valid_code_str", valid_code_str)
    f = BytesIO()
    img.save(f, "png")
    data = f.getvalue()
    request.session[‘code‘]=valid_code_str

    return HttpResponse(data)

3、readme

需求
    1 登录功能:基于ajax实现登录功能,生成图片验证码
    2 注册功能:基于ajax和form组件实现
    3 仿博客园系统首页
    4 个人站点实现
    5 后台管理页面
    6 发布文章功能
    7 基于bs4 处理xss攻击
    8 文章详情页
    9 文章评论,支持子评论
    10 文章的点赞和反对
    11 发送邮件功能

设计程序:(设计数据库表结构和关系)
    UserInfo:用户信息

    Blog:个人站点

    Article:文章表

    Category:文章分类表

    Tag:标签表

    Article2Tag:文章标签中间表

    ArticleUpDown:文章点赞表

    Comment:评论表
      id    user_id    aritcleid   comment       parent_id
       1     用户1       给文章 11  评论了 22       null
       2     用户2       给文章 11  评论了 33       null
       3     用户3       给文章11   评论了44         1
       4     用户4       给文章11   评论了55         3
        22
           -44
             -55

4、urls

from django.conf.urls import url
from django.contrib import admin
from mybbs import views
urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^login/‘, views.login),
    url(r‘^get_code/‘, views.get_code),
]

原文地址:https://www.cnblogs.com/di2wu/p/10094641.html

时间: 2025-01-08 22:07:16

django BBS project的相关文章

Django start project

创建一个图书管理的项目 出现如下目录 新建一个应用app 项目和应用已经创建好了, 现在让我们开始写app first  design your models from django.db import models # Create your models here. class Author(models.Model): name=models.CharField(max_length=30) def __str__(self): return self.name class Publish

第8月第21天 django bbs

1. 576 django-admin.py startproject lbforum01 577 ls 578 cd lbforum01/ 579 ls 580 python manage.py startapp forum 581 sudo pip install lbforum 582 ls 583 python manage.py bower install 584 python manage.py bower migrate 588 sudo pip install django-bo

web开发框架Django笔记整理

安装 python  setup.py  install 使用 1.创建工程 django-admin.py startproject Data_Collet_Center 2.运行开发server python manage.pyrunserver 0.0.0.0:8000 3.创建应用 python manage.py startapp DCC 4.配置 Data_collect_Center/settings.py 配置DB: 'ENGINE': 'django.db.backends.s

框架Django番外篇

###下载和创建Django的Project a.1在cmd中,输入下载指令 pip3 install django 2.在cmd下创建的命令 # 创建Django程序 django-admin startproject mysite # 进入程序目录 cd mysite # 启动socket服务端,等待用户发送请求 python manage.py runserver 127.0.0.1:8080 python manage.py runserver #默认 8000 b.1在Pycharm

jQuery补充及Django基本使用_Day18

jQuery扩展 绑定事件 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 <input type="text" id="inp"><input

django学习笔记【001】django版本的确定&amp;创建一个django工程

2.3 查看当前的django版本 python3.5 -m django --version 1.10.4 2.3.1 创建一个django工程 django-admin startproject mysite 在创建工程时的一些注意项: 1.程序中所以的命名力求见名知义,这个工程明也一样 2.注意这个工程不要和python中其它的东西重名:如test,django 这个的命名对于工程来说是不合适的. 所谓的django工程(project)只不过是一个在当前目录下的一个子目录,里面包涵了若干

Django初探(3) 从应用程序到模型和页面

1.我们需要建立一个Django的Project: django-admin.py startproject ProjectName 2.需要对这个Project 进行调整: 首次执行migrate是为了确保Django中数据库与项目的当前状态匹配 python manage.py migrate 3.创建一个应用程序: python manage.py startapp Appname Django项目由一系列应用程序组成,协同工作 打开models.py 进行编写(此处的作用主要是进行数据操

第十七章:Python の Web开发基础(四) MVC与Django

本課主題 MVC 介绍 Django 介紹 MVC 介绍 controllers 处理用户请求 views 放置HTML模版 models 操作数据库 MVC框架就是目录的归类 MVC 是一种软件开发的方法,它把代码的定义和数据访问的方法(模型)与请求逻辑 (控制器)还有用户接口(视图)分开来 Django 介紹 Django开发的一般流程包括模型设计.URL设计.视图编码.模板设计,搭建Django应用的一种典型流程是:先设计好模型,然后就尽快把admin 运行起来,以便你的员工.客户可以尽快

django数据库模型

学习模型之前需要明白何为project,何为app ? 1.在django中project表示配置,eg. 数据库配置.视图模板.安装的app列表以及url和视图函数之间的映射等 2.一个app是一套django功能的集合,通常包含视图和模型,以python包的形式展现:app可以方便的被移植.复用:一个project可以包含多个app,每个app负责不同的功能 系统对app有一个约定:如果你使用了django的数据模型,你必须创建一个django app,模型必须放在apps中: 1.在pyC