[云服务器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 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

很高兴回答您关于使用Django搭建网站的问题!Django是一个使用Python编写的开源Web应用框架,它提供了一套强大的工具和功能,可以帮助您快速搭建高效的网站。下面是一个简单的步骤指南: 1. 安装Django:首先,您需要安装Django。在命令行中运行以下命令:`pip install django` 2. 创建Django项目:在命令行中进入您想要创建项目的目录,并运行以下命令:`django-admin startproject projectname`,其中`projectname`是您的项目名称。 3. 创建应用程序:进入您的项目目录,运行以下命令:`python manage.py startapp appname`,其中`appname`是您的应用程序名称。 4. 配置数据库:在项目目录中的`settings.py`文件中,配置数据库连接。您可以选择使用SQLite作为开发环境的默认数据库。 5. 创建模型:在应用程序目录中的`models.py`文件中定义您的数据模型。这些模型将映射到数据库表。 6. 运行迁移:在命令行中运行以下命令以创建数据库表格:`python manage.py makemigrations`,后运行`python manage.py migrate`。 7. 创建视图:在应用程序目录中的`views.py`文件中定义处理网页请求的视图函数。 8. 创建URL映射:在应用程序目录中的`urls.py`文件中定义URL映射,将URL与相应的视图函数关联。 9. 创建模板:在应用程序目录中创建一个`templates`文件夹,并在其中创建HTML模板文件,以定义网页的外观和布局。 10. 运行开发服务器:在命令行中运行以下命令以启动开发服务器:`python manage.py runserver`。然后,您可以在浏览器中访问`http://localhost:8000`来查看您的网站。 以上是一个简单的搭建Django网站的步骤指南。当然,Django还有很多其他功能和特性,可以根据您的需求进行配置和扩展。希望对您有所帮助!如果您有任何进一步的问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值