基于Django的计算机编程技术学习与服务平台

临近毕业,又到了赶毕设的时候了,本次介绍分享一下自己的毕业设计项目吧。

项目主题:基于Django的计算机技术编程技术学习与服务平台

实现功能:

1.登入:用户的登陆注册

2.Python教程:实现用户的Python技术文章的浏览收藏转发以及评论的功能

3.IT散文:实现用户对散文博客的阅读浏览转发评论以及赞赏的功能

4.源码共享:实现用户的免费或者第三方支付付费的下载功能

5.学习培养:用户可以通过在本站通过视频,电子书,以及培训机构报名的多渠道进行技术进阶学习

6.学习日志:用户可以在本站记录自己的学习过程与收获以便后续的学习

7.技术分享:用户可以在该栏目群聊交流讨论分享技术

8.系统公告:管理员发布平台公告告示,用户在此浏览阅读

9.留言板:用户的留言实现

设计技术:

PythonWeb框架(Django),MySql,Python,Web三件套,websocket,Alipay第三方支付!

大概技术模块流程:

(1)Mysql的数据库设计,确定数据库结构的设计,一对一或者一对多的字段,如一篇文章拥有多个标签,一个标签也可以对应多篇文章,一个用户拥有多个日记一篇文章被多位用户评论等,以此来确定Foreignkey和Manytomany的用法。这里拿一条语句作为引入即可

tag = models.ManyToManyField(category,verbose_name='文章标签')

(2)文章和技术教程的展示就是纯粹的在views试图获取数据库在前端实现遍历渲染即可,评论就是对Post请求,将Input的内容提交到数据库再获取数据库里该文章的评论内容拿来前端渲染,转发就是一段JS代码直接拿来用即可,这里相信同学们在做别的网站可能也会用到,我就直接吧这段JS代码粘贴到这里

<div class="modal-body" style="height: 100px"><div class="d-flex justify-content-center w-100 share-to"><div class="bdsharebuttonbox"><a href="#" class="bds_more" data-cmd="more"></a><a href="#"class="bds_qzone"data-cmd="qzone"></a><ahref="#" class="bds_tsina" data-cmd="tsina"></a><a href="#" class="bds_tqq"data-cmd="tqq"></a><a href="#"class="bds_renren"data-cmd="renren"></a><ahref="#" class="bds_weixin" data-cmd="weixin"></a></div><script>window._bd_share_config = {"common": {"bdSnsKey": {},"bdText": "","bdMini": "2","bdPic": "","bdStyle": "0","bdSize": "16"},"share": {},"image": {"viewList": ["qzone", "tsina", "tqq", "renren", "weixin"],"viewText": "分享到:","viewSize": "16"},"selectShare": {"bdContainerClass": null,"bdSelectMiniList": ["qzone", "tsina", "tqq", "renren", "weixin"]}};with (document) 0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=' + ~(-new Date() / 36e5)];</script></div></div>

同理IT散文也一样,不过在IT散文业务模块里面有分页和搜索功能,这个就是使用Django的ORM的filter检索语句以及Django自带的Paginate分页功能的,在Django里实现对数据的分页只需要按照步骤来就可以啦,就几条语句,这里我把我的对IT散文页面的分页效果代码粘贴这里,如每页展示8个,页面共显示10个分页

def itblog(request,num=1):searchdata=request.GET.get('s')num = int(num)# 数据分页itblogs=itblog_conment.objects.all().order_by('-time')if searchdata:itblogs=itblogs.filter(content__contains=searchdata)else:itblogs = itblog_conment.objects.all().order_by('-time')itblogs=Paginator(itblogs,8)page_itblogs=itblogs.page(num)# 页码begin = (num - int(math.ceil(10.0 / 2)))if begin < 1:begin = 1# 每页结束页码end = begin + 4if end > itblogs.num_pages:end = itblogs.num_pagesif end <= 5:begin = 1else:begin = end - 4pageList = range(begin, end + 1)context={'itblogs':page_itblogs,'pageList':pageList,'currentNum': num}return render(request,'itblog.html',context)

另外我们在技术教程和IT散文以及其对应的详情页就是通过点的数据文章的ID来获取该文章的对象,一次来获取该文章的所有数据信息(作者,阅读量,发布时间,内容详情,字数等)另外文章的阅读量我们为了好看默认给了5015,点后点击一次我们便会在其models的表里面调用

    def incre_views(self):self.readed_num += 1self.save(update_fields=['readed_num'])

使其该表的阅读量的字段对应的数值加1即可,另外页面的右侧也实现了按照阅读量以及最近发布时间排序的文章,就是使用数据库ORM的基本排序方法就好了orderby(排序的字段),如数值字段(默认从小到大)时间字段(默认最早)等

(3)源码共享我们这里是把项目存在服务器里面,因为毕竟项目数量多占据内容,然后正常从服务器获取对象渲染即可,不过这里需要学习支付订单校验的处理,篇幅较多后续会再补充。

(4)技术交流就是使用Websocket协议异步处理,但是django自身是不支持的,但是呢Django里面的Channels拓展却支持异步处理以此来实现全双工通信的效果,比html单道通信就是好效率高延迟低,实现思路也很容易,在Django中创建一个WebSocket路由,用于处理WebSocket连接和消息

from channels.generic.websocket import AsyncWebsocketConsumerclass MyWebSocketConsumer(AsyncWebsocketConsumer):async def connect(self):await self.accept()async def disconnect(self, close_code):passasync def receive(self, text_data):pass

,WebSocket路由与URL关联:在Django中将WebSocket路由与URL关联起来,以便用户可以通过URL访问WebSocket

from django.urls import pathfrom.consumers import MyWebSocketConsumerwebsocket_urlpatterns = [path('ws/my/', MyWebSocketConsumer.as_asgi()),
]

,模板中使用WebSocket:在模板中使用WebSocket,以便在Web页面中显示WebSocket连接和消息

from django.urls import pathfrom.consumers import MyWebSocketConsumerwebsocket_urlpatterns = [path('ws/my/', MyWebSocketConsumer.as_asgi()),
]

,上是实现WebSocket的基本步骤。需要注意的是,WebSocket是一种双向通信方式,因此在WebSocket路由中需要处理发送和接收消息的逻辑。

(5)个人日志的实现其实也很容易,其实也就是对Form表单的提交数据的获取,唯一一个就是我们知道长文本的编写我们肯定希望是用文本编辑器实现的富文本编辑器或者MardDow都可以,在数据库的后台我们很容易实现,简要流程如下:选择一个富文本编辑器:可以选择使用现有的富文本编辑器,例如CKEditor、TinyMCE等。也可以自己开发富文本编辑器。
安装富文本编辑器:将富文本编辑器安装到Django项目中。可以使用pip命令安装富文本编辑器:pip install django-ckeditor
配置富文本编辑器:在Django项目中配置富文本编辑器,以便在后台使用

在模型中添加富文本字段:在Django模型中添加富文本字段,以便在后台编辑富文本内容。例如:

from django.db import models
from ckeditor.fields import RichTextFieldclass MyModel(models.Model):content = RichTextField()

在Admin中添加富文本编辑器:在Admin中添加富文本编辑器,以便管理员可以在后台编辑富文本内容。例如:

from django.contrib import admin
from.models import MyModelclass MyModelAdmin(admin.ModelAdmin):fields = ['content']admin.site.register(MyModel, MyModelAdmin)

以上实在后台上传文件是引入文本编辑器的流程,而在前端引用话相对麻烦,但是如果我们投机取巧的话就容易了,我i直接在外网codepen上找到了前端的该文本编辑器的代码直接拿来复制即可,但是我花了一会时间去调节CSS的样式,毕竟人家写好是为了符合人家的项目,布局样式肯定多多少少不一样的,前端实现编辑样式后就是文件的Form表单以及Pose请求了,这都是Django的前后端基本啦。

(6)学习培养的业务模块也很容易,比如该模块有3个字栏目(视频,电子书,机构),我们介绍一下视频,视频我是从Bilibili爬取了上白条热门的视频详情包含(UP住个人主页链接,视频链接,播放量,时间,评论量以及图片的URL),但是我这里有一个问题不知道为什么,我刚开始的时候图片还可以显示,后面就显示空白啦,也没有找到解决办法,无奈暂时随便找了一张艾伦的图片放上去啦,点击UP主进入其B站主页,点击视频播放视频。电子书我是同理的,不过电子书的前端下载链接也是引入网盘或者云服务器的。

(7)公告其他的就很简单了,就不做叙述了,本次介绍了有点简介啦,只是赶一个Blog,过两天会把该项目流程做详细解释的,另外该项目我已经部署到服务器啦,说到这里给大家介绍一下如何简单把项目部署到网上让别人点击链接就可以访问你的项目,这样就大大提高了效率,方法就是使用ngrok实现内网穿透,只需1分钟时间,只需几条代码命令即可,好了现在附上部分效果图,我们下次见。

项目运行效果图:

写的不好,本次见谅!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/646285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3 emits 结合回调函数的使用

回调函数 先说下啥是回调函数&#xff0c;举个例子&#xff0c;当A方法调用B方法时&#xff0c;A方法会传一个方法作为参数给B方法&#xff0c;B方法中可以去按照逻辑执行A传递过的函数&#xff0c;就是回头再调用A方法传参给的方法。有点绕哈&#xff0c;写段代码参考下 con…

MacOS 无法ping 通 github.com 解决方案

ping github.com 会显示请求超时&#xff1a; PING github.com (192.30.253.112): 56 data bytes Request timeout for icmp_seq 0 Request timeout for icmp_seq 1 Request timeout for icmp_seq 2 Request timeout for icmp_seq 3 Request timeout for icmp_seq 4 Request …

无刷电机篇(一)直流无刷电机(BLDC)介绍

目录 01 直流无刷电机介绍 直流无刷电机内部结构 转子描述 定子描述 02 直流无刷电机分类 直流无刷电机分类描述 内、外转子电机描述 内、外转子电机区别 03 直流无刷电机参数 无刷电机参数 04 文章总结 大家好&#xff0c;这里是程序员杰克。一名平平无奇的嵌入式软…

PCL 高斯投影正算:大地坐标转高斯投影坐标(C++详细过程版)

目录 一、算法原理二、代码实现三、结果展示四、测试数据PCL 高斯投影正算:大地坐标转高斯投影坐标(C++详细过程版)由CSDN点云侠原创。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 二、代码实现 头文件及读取保存函数见:

记事本(父页面与iframe子页面的联通,vue3+ts展示fbx模型,与tga贴图)

vue3ts 展示fbx与tga贴图 npm i three --save <template><div ref"modelContainer"></div> </template><script setup lang"ts"> import { ref, onMounted } from vue; import * as THREE from three; import { FBXLoader…

深度学习基础之数据操作

深度学习中最常用的数据是张量&#xff0c;对张量进行操作是进行深度学习的基础。以下是对张量进行的一些操作&#xff1a; 首先我们需要先导入相关的张量库torch。 元素构造&#xff08;初始化&#xff09; 使用arange创造一个行向量&#xff0c;也就是0轴&#xff08;0维&a…

python学习笔记11(程序跳转语句、空语句)

&#xff08;一&#xff09;程序跳转语句 1、break 用法&#xff1a;循环语句中使用&#xff0c;结束本层循环&#xff0c;一般搭配if来使用。注意while/else语法 示例&#xff1a; i0; while i<3:user_nameinput(请输入用户名&#xff1a;)pwdinput("请输入密码&a…

arco design table遇到的一些问题

问题1:不知情就成了树形table table中不知道为啥就多了个树形加号在前面,查找问题后发现,是后端返回的数据中有children,框架中默认对这个参数做了树形结构。 解决办法: 当时没找到取消或者修改字段的属性或方法,就将此字段去掉,并将内容clone到childData。 问题2:c…

Java如何对OSS存储引擎的Bucket进行删除【OSS学习】

在前面学会了如何对OSS里面的Bucket进行创建&#xff1a;Java如何对OSS存储引擎的Bucket进行创建-CSDN博客 接下来&#xff0c;记录一下如何删除Bucket存储空间 目录 1、看看OSS&#xff1a; 2、代码&#xff1a; 3、运行效果&#xff1a; 1、看看OSS&#xff1a; 我准备将…

opencv009 滤波器01(卷积)

图像卷积操作&#xff08;convolution&#xff09;&#xff0c;或称为核操作&#xff08;kernel&#xff09;&#xff0c;是进行图像处理的一种常用手段&#xff0c; 图像卷积操作的目的是利用像素点和其邻域像素之前的空间关系&#xff0c;通过加权求和的操作&#xff0c;实现…

什么是中间人攻击? ssh 连接出现 Host key verification failed 解决方法

文章目录 前言known_hosts 文件是什么文件路径示例 连接出现 Host key verification failedssh-keygen -R [hostname or ip address]删除整个 known_hosts 文件 其它聊聊中间人攻击ssh 如何保证安全&#xff1f;加密流程漏洞在哪里如何避免中间人攻击 个人简介 前言 最近服务器…

可pin to pin替代TI DRV8872的GLOBALCHIP直流电机驱动芯片GC8872,低成本、宽电压,内置电荷泵,短地短电源保护,限流

在现如今电机驱动芯片处于持续涨价的状态下&#xff0c;并且供货期货期长&#xff0c;偶尔缺货的状态下。为了降低设计成本&#xff0c;第一时间设计出优秀的产品占据市场高位。我这边推荐使用浙江GLOBALCHIP国产电机驱动芯片进行替换设计。供货稳定、价格低廉。GC8872是GLOBAL…

使用uniApp+vue3+Vite4+pinia+sass技术栈构建微信小程序

使用uniApp的cli模式安装&#xff0c;可以使用vscode开发。不用再单独去下载HBuilderX. 1.基础安装 vue3tsuniapp 方法一&#xff1a; npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project方法二&#xff1a;可以去uni-preset-vue的vite分支下选择vite-ts直接下载zi…

win7虚拟机安装VMware Tools失败,主机远程虚拟机解决

情况描述:安装完win732位虚拟机后,VMWare Tools安装失败,这时传文件就成了问题;所以才有了此文档,需要通过主机直接远程到虚拟机进行文件传输,网上的说明不全,导致摸索了一番才解决此问题; 首先,下载win732补丁; 下载地址:Microsoft Update Catalog首先,虚拟机需要…

【数据结构】 链队列的基本操作 (C语言版)

目录 一、链队列 1、链栈的定义&#xff1a; 2、链栈的优缺点&#xff1a; 二、链队列的基本操作算法&#xff08;C语言&#xff09; 1、宏定义 2、创建结构体 3、链栈的初始化 4、链队列的入队 5、链队列的出队 6、取链队列的对头元素 7、链队列的销毁 8、链…

Windows Defender存在威胁执行操作无反应且一直存在红叉(已解决)

文章目录 前言问题如图一、原因二、解决办法&#xff08;亲试有效&#xff09;总结 前言 Windows安全中心&#xff08;Windows Defender&#xff09;执行快速扫描/完全扫描后一直存在威胁&#xff0c;执行隔离或者删除操作后下次扫描还会扫出该威胁&#xff0c;但看威胁文件位置…

一些es的基本操作

目录 给索引增加字段&#xff1a;给索引删除字段[^1]&#xff1a;创建索引&#xff1a;插入document删除document(应该是按ID) : 给索引增加字段&#xff1a; 用postMan: 给名为population_portrait_hash_seven的索引增加了一个text类型的字段。 用chrome插件Elasticvue 的Re…

架构管理敏捷常用工具

产品部署&#xff1a;Jenkins/云效流水线 代码库&#xff1a;Git 产品管理&#xff1a;Maven 任务进度管理&#xff1a;Jira/云效 API管理&#xff1a;SmartdocTorna-接口规范和接口发布 代码review&#xff1a;sornor做代码review 生产事故和BUG管理&#xff1a;阐道/云效-bug…

CentOS最优雅的方式安装mysql8

本来想偷个小懒使用yum/dnf安装一下mysq8,但是发现会出现各种问题,系统是CentOS8的. 于是还是使用最原始但是也是比较简单的方法来进行安装: 首先进入到https://dev.mysql.com/downloads/mysql/ 选择系统是Linux-Generic, 然后系统版本x86 64bit, 选择第一个TAR Archive的文件…

vue.config.js的配置

vue.config.js的配置 const path require(path) const CompressionPlugin require("compression-webpack-plugin") const MomentLocalesPlugin require(moment-locales-webpack-plugin) const ProgressBarPlugin require(progress-bar-webpack-plugin) const ch…