百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

django留言板_留言板html好看的模板

yund56 2025-02-25 00:46 140 浏览

使用Django制作一个留言板,使用template做前端,ORM做后端。用户之前已经询问过Django的教程,现在想做一个具体的项目。首先,我需要回顾之前的教程内容,确保步骤一致,并补充用户可能需要的额外信息。

用户的需求明确:留言板,前后端分别用Django的模板和ORM。这意味着需要创建模型处理数据,视图处理逻辑,模板展示页面,以及URL路由。可能还需要表单让用户提交留言,但用户没有提到使用Django表单,所以可能需要手动处理POST数据。

首先,创建Django项目和应用是基础步骤,用户之前的教程已经覆盖,但可能需要提醒用户执行startproject和startapp命令。接下来是模型部分,留言板需要一个模型来存储留言内容,比如标题、内容、作者、创建时间等字段。使用ORM定义模型,然后生成迁移文件和应用迁移。

然后是视图部分,需要处理GET和POST请求。GET请求显示留言列表,POST请求处理用户提交的新留言。在视图中,需要获取所有留言对象传递给模板,同时处理表单提交,验证数据后保存到数据库。这里可能需要使用Django的request.POST来获取数据,或者使用Django的Form类,但用户可能希望简化,所以直接处理POST数据更直接。

模板方面,需要创建一个HTML页面展示留言列表和一个表单供用户提交新留言。要使用Django模板语言循环显示留言,并处理表单的提交动作,确保CSRF令牌的存在。可能需要指导用户如何组织模板目录,确保settings.py中的TEMPLATES配置正确。

URL配置需要将路径映射到视图函数,包括处理根路径和提交留言的路径。可能需要创建应用级别的urls.py并包含到项目URL中。此外,用户可能需要静态文件配置,比如CSS,但用户没有特别提到,所以可能暂时忽略,或者简单提及。

测试部分,用户可能需要知道如何运行服务器,访问页面,提交留言并查看结果。还需要提醒用户创建超级用户,可能通过admin界面管理留言,但用户可能更倾向于直接在前端提交,所以可能需要在模型中设置默认的作者字段,或者允许匿名提交,这里可能需要调整模型,比如允许作者为空或设置默认值。

可能的难点包括处理表单的POST请求,特别是CSRF保护,需要在模板中添加{% csrf_token %}。另外,日期时间的处理,比如auto_now_add自动设置创建时间。还有在视图中如何重定向以防止重复提交,使用redirect函数返回到首页。

需要检查用户是否了解如何运行服务器,执行迁移命令,以及可能的错误处理,比如表单验证不通过时的提示。如果用户没有使用Django表单,可能需要手动验证字段,比如确保标题和内容不为空,但为了简化,可能暂时跳过,只在保存前进行基本检查。

最后,确保步骤清晰,代码示例正确,特别是模板中的变量名称与视图中传递的上下文一致。例如,视图中的articles变量在模板中循环显示。同时,表单的action属性指向正确的URL,比如/submit/,并在urls.py中配置对应的路径。

可能还需要提醒用户关于安全性的问题,比如在生产环境中需要更多的验证和防护措施,但在此示例中以简单实现为主。总结来说,步骤包括:创建项目和应用,定义模型,配置URL,编写视图和模板,处理表单提交,运行测试。

以下是使用 Django 制作留言板的完整步骤,包含模板(前端)和 ORM(后端):


1. 创建项目和应用


django-admin startproject messageboard
cd messageboard
python manage.py startapp board

2. 配置项目设置

修改 messageboard/settings.py:


INSTALLED_APPS = [
    ...
    'board',  # 添加新应用
]

# 配置模板路径
TEMPLATES = [
    {
        'DIRS': [BASE_DIR / 'templates'],  # 全局模板目录
        ...
    },
]

# 配置静态文件(CSS/JS)
STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / 'static']  # 可选,存放全局静态文件

3. 创建留言模型(ORM)

在 board/models.py 中定义模型:

from django.db import models
from django.utils import timezone

class Message(models.Model):
    author = models.CharField(max_length=50, verbose_name='作者')
    content = models.TextField(verbose_name='内容')
    created_at = models.DateTimeField(default=timezone.now, verbose_name='发布时间')

    def __str__(self):
        return f"{self.author}: {self.content[:20]}"

生成并应用迁移:

python manage.py makemigrations
python manage.py migrate

4. 创建视图逻辑

在 board/views.py 中编写视图:

from django.shortcuts import render, redirect
from .models import Message

def message_list(request):
    # 显示所有留言
    messages = Message.objects.all().order_by('-created_at')
    return render(request, 'board/message_list.html', {'messages': messages})

def submit_message(request):
    # 处理表单提交
    if request.method == 'POST':
        author = request.POST.get('author')
        content = request.POST.get('content')
        if author and content:
            Message.objects.create(author=author, content=content)
        return redirect('message_list')  # 提交后重定向到列表页
    return redirect('message_list')  # 非 POST 请求也重定向

5. 配置 URL 路由

  • 项目路由 (messageboard/urls.py):


from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('board.urls')),
]
  • 应用路由 (board/urls.py,需手动创建):
from django.urls import path
from . import views

urlpatterns = [
    path('', views.message_list, name='message_list'),
    path('submit/', views.submit_message, name='submit_message'),
]

6. 创建模板(前端)


templates/board/message_list.html 中编写模板:





    留言板
    


    

留言板

{% for message in messages %}

{{ message.author }} · {{ message.created_at }}

{{ message.content }}

{% endfor %}

发表留言

{% csrf_token %}



7. 启动服务器并测试

python manage.py runserver

访问 http://127.0.0.1:8000/,效果如下:

  • 显示所有留言(按时间倒序)
  • 通过表单提交新留言
  • 提交后自动刷新页面显示新留言

8. 扩展功能(可选)

添加分页

修改视图 message_list:


from django.core.paginator import Paginator

def message_list(request):
    messages = Message.objects.all().order_by('-created_at')
    paginator = Paginator(messages, 5)  # 每页5条
    page_number = request.GET.get('page')
    page_obj = paginator.get_page(page_number)
    return render(request, 'board/message_list.html', {'page_obj': page_obj})

修改模板:




添加管理后台

在 board/admin.py 中注册模型:


from django.contrib import admin
from .models import Message

admin.site.register(Message)

创建超级用户:


python manage.py createsuperuser

访问
http://127.0.0.1:8000/admin 管理留言。


最终效果

  • 用户通过表单提交留言(作者和内容)
  • 留言按时间倒序显示
  • 基础样式优化
  • 支持分页和管理后台

相关推荐

没有获得Windows 10 20H2升级通知,怎样直接升级

微软公司已经正式发布Windows1020H2操作系统,在正常情况下,微软只会首先推送到少量电脑,然后一边推送一边采集遥测数据。收集遥测数据可以确定哪些电脑可以更新,哪些电脑在更新后可能会失败,微...

不想让人随便卸载你安装的程序,用这四招,他将无计可施

Windows10不提供设置删除应用程序限制的功能,有几种间接方法可以防止用户删除操作系统中的程序和游戏。一、WindowsInstaller服务使用Windows工具,可以部分限制用户的权限。如...

一文看懂苹果全球开发者大会 五大系统全面升级

来源:环球网【环球网智能报道记者张阳】北京时间6月23日凌晨1点,苹果全球开发者大会(WWDC2020)如期举行,还是那个熟悉的乔布斯剧院,依旧是高水准的视频展示,但是这届WWDC,却是苹果历史...

无需等待微软分批推送,23H2可借助注册表快速获取Win11 24H2更新

IT之家10月15日消息,Windows1124H2正在分批推送,但由于存在多种Bug,微软已经开始放缓其推送节奏。WindowsLatest发现,Windows1123H2...

办公小技巧:剑走偏锋 PPT中打造动态图表

年底到了少不了又要制作各种总结报表,为了让自己的报表与众不同,我们可以借助PowerPoint动画组件+报表的方式,打造出更为出彩的动态图表。下面以PowerPoint2016为例,介绍如何使用三维...

文档表格 版本差异何在

在办公过程中,对文档或表格的修改是司空见惯的事。那么,一份文档做了内容改动,如何知道差异在哪里?一份表格改动部分数据,如何知道哪些有所变动?不要说审阅和修订功能,因为不是所有人都会用这些功能来标注的,...

Excel VBA自制日历组件16色可选 完美替代VBA日期控件

本日期组件可跟随单元格跟随窗体中ActiveX文本框组合框控件16种配色可选私信回复880日历可体验效果使用说明1打开自己需要应用日历面板的Excel表,注意必须是启用VBA的格式2在...

如何从交互角度读懂产品需求文档

作为设计师,理解产品经理提供的需求文档是交互设计工作的重要前提与起点,然而对于很多设计师来说,需求文档内容通常非常复杂,设计师们需要花费大量时间去消化、理解和归纳。本文作者结合公司示例,分析设计师如何...

植入让文档变得更强大

有效地利用文档置入技术,会让我们的常用文档功能变得更加强大,实现更加高效或有趣的应用。1.写字板文档嵌入其他文档有时,我们要组织一个大型的文档,但是这些文档的内容可能来自于不同种类的文档编辑器,比如...

Office 2016滚动文本框 顺手就来

【电脑报在线】如果一页PPT内容较多无法在完全显示,就需要用到滚动文本框,在PPT2016中借助控件即可快速制作滚动文本框。在“告诉我你想要做什么”输入“文本框控件”,在搜索结果点击“文本框(Acti...

Axure的多状态复选树

本文将详细介绍如何在Axure中实现一种增强型的多状态复选树组件,它不仅支持全选、半选和未选等状态,还具备动态加载、关键字筛选等高级功能。多状态复选树(Multi-StateCheckboxTre...

办公小技巧:PPT中控件图表巧联动

在利用PPT进行图表演示时,操作者有可能要与图表进行交互联动,比如通过输入数据来预测产品的生产情况等,这时就需要用到“开发工具”中的控件了。几个控件配合几句VBA代码,就可以轻松实现上述交互联动效果(...

用好插件——找回火狐的旧功能

现在的软件,特别是浏览器类软件,更新换代速度都很快,而且无论是外观界面还是系统组件都会有较大的变化,这样会让很多朋友无所适从。以大家常用的火狐浏览器为例,它就已经升级到了最新的35版,而且在新版中对很...

重新认识控件(二)

图片和文字,都是一种数据形式。我平时对文本框的录入,报错和提交的设计比较多。最近涉及到图片控件的设计,细细琢磨一下,这玩意还有一些平时没太注意的细节点,感觉对于其他控件的设计有指导意义,特此总结一下传...

JSA宏教程——在文档中添加复合框控件

上一期,我们初步认识了控件Control,本节我们将继续控件的相关内容。这几期我们将逐一介绍相关控制。本节先介绍复合框(也叫组合框)Combobox。复合框的作用复合框就是一个下拉选项框,一次显示一个...