当前位置: 首页 > news >正文

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

准备

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

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

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

配置我们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 Userclass 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.titleclass 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 = postnew_comment.author = request.usernew_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.userpost.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,pathurlpatterns = [path("admin/",admin.site.urls),path("discussion/",include("discussion.urls")),

编辑discussion/urls.py

from django.urls import path
from . import viewsurlpatterns = [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 markdowndef 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.mrgr.cn/news/26996.html

相关文章:

  • 拳皇97确反笔记
  • 性能诊断的方法(五):架构和业务诊断
  • Nginx的使用场景:构建高效、可扩展的Web架构
  • 【nginx】ngx_http_proxy_connect_module 正向代理
  • 91-java cms垃圾回收器
  • 解决ubuntu 24.04 ibus出现卡死、高延迟问题
  • 如何自学SQL(从入门到精通)?
  • 这些211学校,跳一跳就能够着!自动化考研择校
  • 2024北京IC WORLD大会圆满收官!高频科技收获满满,同“芯”共促产业发展
  • iPhone 16预售已开,沙漠金色最抢手,喜提新机后别忘了这件事!
  • 监控易监测对象及指标之:全面监控DB2_linux数据库
  • C++ 继承【一篇让你学会继承】
  • 红黑树的删除
  • 10大差异!Linux运维VS云计算运维深度解析
  • 运算放大器选型的关键参数
  • CISP可以自己报名吗?CISP在哪报名?看完你就知道了!
  • 网络工程师学习笔记——网络互连与互联网
  • 清理C盘缓存的垃圾,专业清理C盘缓存垃圾与优化运行内存的策略
  • 抖音视频下载
  • C和指针:函数