[云服务器9]使用django搭建论坛网站?

news2024/12/23 13:11:59

准备

首先,我们打开雨云官网。

然后我们注册一个账号,注册并登录好后,我们找到主面版的云服务器,然后点击购买云服务器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配置我们2h2g就足够了,因为我们的流量不是那么大……操作系统推荐选Ubuntu,预装选择MCSM。

为什么要用游戏面板呢?我们做的不是网站APP吗?

这是因为,我们需要进行进程守护,如果不守护,那么APP将在SSH断开连接时终止。

购买好后,会跳转到服务器列表,我们在这里找到你刚刚买的服务器,点击管理

找到远程连接这一栏,可以看到以下信息:

在这里插入图片描述

然后打开你喜欢的SSH连接软件(诸如PuTTY,Xterminal,或者是Win10自带的SSH工具都可以),按照提供的账号密码登录SSH。

什么?你说密码太~长了不好记?

可以尝试修改密码哦~
不过雨云怎么又加了一个不能有连续字符的可爱要求

登录好后,我们先更新以下环境,以免出现玄学的错误。

在SSH中输入:

apt update
apt upgrade

如果出现了A reboot required之类的消息(白字),就在雨云面板选择“重启”,然后重连SSH就好啦!

然后安装本期教程用到的环境:

# django
pip install django

如果提示了Command not found,那就先输入

apt install python3-pip

再进行安装。

正式部署!

首先,我们使用Django的命令行工具创建一个新的项目:

django-admin startproject forum

然后创建一个APP(不同于项目哦):

cd forum
python3 manage.py startapp discussion

然后cd discussion,使用nanoorvim之类的工具打开models.py并编辑:

from django.db import models
from django.contrib.auth.models import User

class Post(models.Model):
	title = models.CharField(max_length=200)
	content = models.TextField()
	created_at = models.DateTimeField(auto_now_add=True)
	author = models.ForeignKey(User,on_delete=models.CASCADE)

	def __str__(self):
		return self.title

class Comment(models.Model):
	post = models.ForeignKey(Post,on_delete=models.CASCADE,related_name="comments")
	content = models.TextField()
	created_at = models.DateTimeField(auto_now_add=True)
	author = models.ForeignKey(User,on_delete=models.CASCADE)

	def __str__(self):
		return f"Comment by {self.author.username} on {self.post.title}"

这样,大概的后端逻辑就做好了。

然后是前端,编辑的文件是views.py,在models.py所处的文件夹下:

from django.shortcuts import render,get_object_or_404,redirect
from .models import Post,Comment
from .forms import PostForm,CommentForm
from django.contrib.auth.decorators import login_required

@login_required
def post_list(request):
	post = Post.objects.all()
	return render(request,"discussion/post_list.html",{"posts":posts})

@login_required
def post_detail(request,pk):
	post = get_object_or_404(Post,pk=pk)
	comments = post.comments.all()
	if request.method == "POST":
		comment_form = CommentForm(request.POST)
		if comment_form.is_valid():
			new_comment = comment_form.save(commit=False)
			new_comment.post = post
			new_comment.author = request.user
			new_comment.save()
			return redirect("post_detail",pk=host.pk)
		else:
			comment_form = CommentForm()
	return render(request,"discussion/post_detail.html",{"post":post,"comments":comments,"new_comment":new_comment,"comment_form":comment_form})

@login_required
def post_new(request):
	if request.method == "POST"
		form = PostForm(request.POST)
		if form.is_valid():
			post = form.save(commit=False)
			post.author = request.user
			post.save()
			return redirect("post_detail",pk=post.pk)
	else:
		form = PostForm()
	return render(request,"discussion/post_edit.html",{"form":form})

然后,我们需要配置网站的URL,以便django识别:(编辑forum/urls.py

from django.contrib import admin
from django.urls import include,path

urlpatterns = [
	path("admin/",admin.site.urls),
	path("discussion/",include("discussion.urls")),

编辑discussion/urls.py

from django.urls import path
from . import views

urlpatterns = [
	path("",views.post_list,name="post_list"),
	path("post/<int:pk>/",views.post_detail,name="post_detail"),
	path("post/new/",views.post_new,name="post_new"),
]

然后就是创建前端页面了,在discussion目录下创建templates/discussion创建post_list.html post_detail.html post_edit.html。这些其实都比较简单,也不用加Django标识符(maybe)。

我们还可以让用户支持使用Markdown格式的帖子。还是在SSH里面输入:

pip install markdown

然后,在views.py中添加一个函数来渲染Markdown:

import markdown

def markdownify(text):
	return markdown.markdown(text)

在HTML文件中,就可以这样(花括号是Django的文档标识符):

<div class="post-content">
	{{ post.content|markdownify|safe }}
</div>

此外,我们还可以用django的内置用户认证系统来管理用户和帖子。在admin.py文件中编辑:

from django.contrib import admin
from .models import Post,Comment

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
	list_display = ("title","author","created_at")

@admin.register(Comment)
class CommentAdmin(admin.ModelAdmin):
	list_display = ("post","author","created_at")

然后可以用django的createsuperuser来创建admin用户,进而用过django内置管理界面来管理了。

搭建好后,我们在MCSM创建一个控制台实例,不需要预装,然后cd到manage.py所在目录,先 migrate,然后输入:

python3 manage.py runserver 8000

然后你就可以通过http://你的服务器IP:8000来访问了!

拓展

限于篇幅,还有一些功能没有展示,如:

  1. 编辑帖子
  2. 删除帖子
  3. 搜索帖子

可以用Nginx反代80端口;

还可以用Cloudflare Turnstile(比ReCaptcha要好)服务,进行人机验证来防止灌水。

SUB PLZ

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

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

相关文章

【C++二分查找】2560. 打家劫舍 IV

本文涉及的基础知识点 C二分查找 LeetCode2560. 打家劫舍 IV 沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。 由于相邻的房屋装有相互连通的防盗系统&#xff0c;所以小偷 不会窃取相邻的房屋 。 小偷的 窃取能力 定义为他在…

荣耀时刻|Anzo Capital 闪耀2024国际金融产业博览会

【2024年9月5日-6日&#xff0c;中国香港】由数汇金融和汇友网主办的2024年国际金融产业博览会香港峰会在香港康得思酒店举行&#xff0c;Anzo Capital 昂首资本作为顶级赞助商和重磅受邀嘉宾出席了本次展会。 此次展会汇聚了众多行业领军企业、知名专家以及投资机构&#xff…

【趣学Python算法100例】抓交通肇事犯

问题描述 一辆卡车违反交通规则&#xff0c;撞人后逃跑。现场有三人目击该事件&#xff0c;但都没有记住车号&#xff0c;只记下了车号的一些特征。甲说&#xff1a;牌照的前两位数字是相同的&#xff1b;乙说&#xff1a;牌照的后两位数字是相同的&#xff0c;但与前两位不同…

Linux - make/Makefile工具的基础使用

文章目录 一、介绍二、工作原理三、使用1、make的使用2、make的常用选项3、Makefile文件 四、总结 一、介绍 make工具和 Makefile 文件是 Linux下非常重要的自动化构建工具&#xff0c; Makefile定义了项目的编译规则&#xff0c;指示make如何编译和链接源代码以生成可执行文件…

[wowoza]使用rtsp协议向wowza推流方法

1、测试前要关闭电脑防火墙 2、测试前要关闭推流验证功能 3、3、关闭回放验证功能 上面设置修改后&#xff0c;要点击restart重启 4、查看服务器ip、端口号、application test player可以预览推流的音视频 有时候需要缓存 url里面注意没有空格

牛客练习赛128(上)

Cidoai的幂次序列 题目描述 登录—专业IT笔试面试备考平台_牛客网 运行代码 #include <bits/stdc.h> using namespace std; signed main(){long long n,k;cin>>n>>k;cout<<2<<\n;cout<<n-1<< <<1<<\n;return 0; } 代…

D - 1D Country(AtCoder Beginner Contest 371)

题目链接: D - 1D Country (atcoder.jp) 题目描述: 数据范围: 输入输出: 题目分析: 典型的l, r 区间问题&#xff0c;即是前缀和问题&#xff0c;但是注意到数据范围, 数据范围1e-9 到 1e9 数据范围&#xff0c;要是从最小到最大直接for循环去模拟的话&#xff0c;时间复杂度…

CMake构建学习笔记16-使用VS进行CMake项目的开发

文章目录 1. 概论2. 详论2.1 创建工程2.2 加载工程2.3 配置文件2.4 工程配置2.5 调试执行 3. 项目案例4. 总结 1. 概论 在之前的系列博文中&#xff0c;我们学习了如何构建第三方的依赖库&#xff0c;也学习了如何去组建自己的CMake项目&#xff0c;尤其是学习了CMake的核心配…

分享六款小众宝藏软件,建议收藏!

分享6款小众却实用的宝藏电脑软件&#xff0c;个个都有独特的作用&#xff0c;可以提高效率、提升体验感&#xff01; 1.Clover 一个超轻量级的文件夹管理工具&#xff0c;跟 Windows 资源管理器差不多。但用 Clover 感觉就像用 Chrome 来整理文件似的。 它最棒的功能就是能像…

【python计算机视觉编程——10.OpenCV】

python计算机视觉编程——10.OpenCV 10.OpenCV10.2 OpenCV基础知识10.2.1 读取和写入图像10.2.2 颜色空间10.2.3 显示图像及结果 10.3 处理视频10.3.1 视频输入10.3.2 将视频读取到NumPy数组中 10.4 跟踪10.4.1 光流10.4.2 Lucas-Kanade算法使用跟踪器使用发生器 10.5 更多示例…

计算架构模式之负载均衡技巧

通用负载均衡算法 负载均衡算法 -轮询 & 随机 如果服务器挂掉了&#xff0c;那么负载均衡器还是可以感知到的&#xff0c;因为连接已经断掉了。 负载均衡算法-加权轮询 假设你有4核的和8核的&#xff0c;由于你的程序没有办法跑完CPU&#xff0c;那么有可能出现4核的和8核…

xmake vscode+clangd实现c/c++程序更精确跳转、补全

clangd相比与vscode自带的c/c插件要好用很多&#xff0c;使用xmake搭配vscode开发c/c程序时&#xff0c;可以通过下面方法使用clangd。 生成compile_commands.json 好像是叫什么compile database&#xff0c;xmake可以使用下面两种方式生成。 1、手动生成 xmake project -k…

[linux基础知识]教你使用vim和ctags阅读linux内核源码

1 安装ctags apt install ctags 2 内核源码目录下添加索引 使用下面命令&#xff0c;添加索引成功后&#xff0c;内核目录下会生成tags 索引文件。 ctags -R 3 vim使用索引阅读源码 跳转到函数变量定义与返回 #跳到函数或者变量定义 Ctrl] #返回 Ctrlo 光标移动到需要…

九九乘法表-for-python

for i in range(1, 10):for j in range(1, i):print(f"{j}*{i}{i*j}\t", end )print()运行结果截图&#xff1a;

Linux 离线安装 Docker

一、安装 docker 1. 下载 Docker 安装包 https://download.docker.com/linux/static/stable/x86_64/ 2. 解压安装包 tar -xvf docker-27.1.0.tgz mv docker/* /usr/bin/3. 将 docker 注册为 service 服务 vim /etc/systemd/system/docker.servicedocker.service [Unit] Des…

学习笔记 韩顺平 零基础30天学会Java(2024.9.14)

P547 Collections工具类2 P554 泛型引入 P555 泛型入门 ArrayList<Dog>arrayList new ArrayList<Dog>()//在这里可以理解为这个arrayList里面只能放Dog类型&#xff0c;就是限制了类型 P556 泛型说明 泛型就是可以代指一类数据类型&#xff0c;可以是Integer也可以…

哪个虚拟机软件在 Mac 上更好用,Mac 虚拟机会影响性能吗?

虚拟机如今已经成为许多用户工作生活不可缺少的工具之一&#xff0c;尤其是对于需要经常切换使用不同系统的用户来说&#xff0c;虚拟机提供了一个便捷而有效的操作平台&#xff0c;解决用户跨系统工作的问题。然而&#xff0c;当我们考虑在Mac上下载运行虚拟机时&#xff0c;会…

艾体宝洞察丨一文读懂最新密码存储方法,揭秘密码存储常见误区!

在信息安全的诸多领域之中&#xff0c;密码的安全存储无疑已然成为最为核心的问题之一。随着攻击技术的不断演进&#xff0c;传统的密码存储方法已无法抵御现代复杂的威胁。更为安全、健壮的密码存储机制也成为当代信息安全从业者的关注点。本篇文章将引入并介绍密码存储中的基…

交叉编译工具链的安装及带wiringPi库的交叉编译实现

交叉编译工具链的安装及带wiringPi库的交叉编译实现 交叉编译的概念交叉编译工具链的安装下载交叉编译工具链配置环境遍变量编译程序到ARM平台 带wiringPi库的交叉编译下载编译wiringPi库调用树莓派的wringPi库 交叉编译的概念 交叉编译是在一个平台上生成另一个平台上的可执行…

【资料分析】平均倍数类

平均 观察选项&#xff0c;差距较大&#xff0c;大胆约分即可 很少的情况下&#xff0c;选项相差很近不能随便约分 倍数 第N次注意增长率是否为下降&#xff01; 问的是基期倍数比哦 平均增长量 十三五这种明确问法&#xff0c;一定是五年 属于有往前推的A和不往前推的…