【项目实战】基于Python+Django+MySQL的新闻发布系统(附完整源码)

1、项目说明

基于python+Django+Mysql的新闻发布系统项目实战

项目需要安装pycharm专业版以及MySQL环境(环境搭建和破解可以看我的B站里的视频有讲解)

  • 首先需要创建数据库数据库名字叫做 db_newswebsite
  • 运行sql导入数据或者也可以直接用命令生成(视频有讲解)
  • 需要安装一下下面的模块(如果运行提示有模块未安装,安装一下即可,命令同下,改一下模块名即可)

项目需要安装 Django、PyMySQL及其附带的其他一些模块

  • Django==3.2.17
  • PyMySQL==0.9.3

安装命令如下:

管理员账户:bhml 123456
 

2、项目主要技术

  • python编程技术

  • Django框架技术

  • MySQL数据库技术

  • html,css,js编程

 

3、项目结构

  • news 主模块(项目的配置文件、路由)

  • newswebsite 项目功能实现

  • static 静态文件文件夹(css,js)

  • templates 前端html文件

  • upload 存放上传的头像,新闻图像文件

  • manage.py 程序的入口

 

4、项目主要功能

  • 用户登录注册

  • 用户对新闻查看与评论

  • 管理员对新闻的管理

  • 新闻的展示,推荐

 

5、部分源码

models.py

from django.db import models
from django.contrib.auth.models import User
from django.utils.timezone import now


# 分类表
class Category(models.Model):
    name = models.CharField(max_length=40, null=False, verbose_name="分类名")  # 分类名

    def __str__(self):
        return self.name

    # 修改显示的表的名字
    class Meta:
        # 给模型类起一个更可读的名字
        verbose_name = '新闻分类'
        # 模型的复数形式
        verbose_name_plural = '新闻分类信息表'
        # pass


# 文章表
class Article(models.Model):
    title = models.CharField(max_length=100, null=False, verbose_name="标题")  # 标题
    intro = models.CharField(max_length=1000, verbose_name="导语")  # 导语
    abstract = models.TextField(verbose_name="摘要")
    category = models.ForeignKey(Category, related_name="cate", on_delete=models.CASCADE,
                                 verbose_name="分类")  # 连接分类表的外键,多对一关系
    content = models.TextField(null=False, verbose_name="内容")  # 内容
    publish_time = models.DateTimeField(null=False, default=now, verbose_name="发布时间")  # 发布时间
    image = models.FileField(upload_to='article_image', verbose_name="图片")  # 文章配图
    author_name = models.CharField(max_length=100, null=False, verbose_name="作者")  # 作者名字
    author_avatar = models.FileField(upload_to='author_avatar', verbose_name="作者头像")  # 作者头像
    author_desc = models.CharField(max_length=100, null=False, verbose_name="作者签名")  # 作者签名

    def __str__(self):
        return self.title  # 在后台中以文章标题显示

    # 修改显示的表的名字
    class Meta:
        # 给模型类起一个更可读的名字
        verbose_name = '文章'
        # 模型的复数形式
        verbose_name_plural = '文章信息表'


# 精选文章
class Best(models.Model):
    select_article = models.ForeignKey(Article, related_name='select_article', on_delete=models.CASCADE,
                                       verbose_name="精选文章")  # 被精选的文章
    SELECT_REASON = (
        ('今日热闻', '今日热闻'),
        ('首页推荐', '首页推荐'),
        ('小编推荐', '小编推荐')
    )
    select_reason = models.CharField(choices=SELECT_REASON, max_length=50, null=False, verbose_name="推荐")  # 精选的理由

    def __str__(self):
        return self.select_article.category.name + '-' + self.select_reason + '-' + self.select_article.title

    # 修改显示的表的名字
    class Meta:
        # 给模型类起一个更可读的名字
        verbose_name = '精选文章'
        # 模型的复数形式
        verbose_name_plural = '精选文章信息表'


# 用户信息表
class UserProfile(models.Model):
    belong_to = models.OneToOneField(to=User, related_name="profile", on_delete=models.CASCADE,
                                     verbose_name="用户")  # 所属用户
    avatar = models.FileField(upload_to='avatar', verbose_name="用户头像")  # 用户头像

    def __str__(self):
        return self.belong_to.username

    # 修改显示的表的名字
    class Meta:
        # 给模型类起一个更可读的名字
        verbose_name = '用户'
        # 模型的复数形式
        verbose_name_plural = '用户信息表'


# 评论表
class Comment(models.Model):
    belong_article = models.ForeignKey(Article, related_name='article', on_delete=models.CASCADE,
                                       verbose_name="文章")  # 评论所属的文章
    belong_user = models.ForeignKey(User, related_name='user', on_delete=models.CASCADE, verbose_name="评论者")  # 评论者
    words = models.CharField(max_length=200, null=False, verbose_name="评论内容")  # 评论内容
    created = models.DateTimeField(null=False, default=now, verbose_name="评论时间")  # 评论时间

    def __str__(self):
        return self.belong_user.username + ': ' + self.words

    # 修改显示的表的名字
    class Meta:
        # 给模型类起一个更可读的名字
        verbose_name = '评论'
        # 模型的复数形式
        verbose_name_plural = '评论信息表'

# python manage.py makemigrations
# python manage.py migrate

# python manage.py createsuperuser

 

6、运行截图

 

 

 

 

7、项目总结

本项目是一个非常适合练手作为大作业的项目,对我们的Django框架技术的提升有很大的帮助,推荐大家学习研究这个项目,搞懂其中的原理流程以及知识点非常关键。
 
项目资料截图:

资料获取地址:https://h5.m.taobao.com/awp/core/detail.htm?ft=t&id=705283106786
B站视频讲解地址:https://www.bilibili.com/video/BV1Ns4y1o7oZ/
 
注:其他问题请参看视频讲解,都有介绍,一定要认真看完哦!
代码编写、视频录制不易,感谢您的支持,祝您学习愉快!
 

避免走丢,记得关注哦🌹🌹🌹

posted @ 2023-03-12 16:41  兵慌码乱  阅读(1165)  评论(0编辑  收藏  举报