Web实战丨基于django+html+css+js的在线博客网站

简介: Web实战丨基于django+html+css+js的在线博客网站

写在前面

本期内容:基于Django+Html+Css+JavaScript的在线博客网站

实验环境:

  • vscode或pycharm
  • python(3.11.4及以上)
  • django

实验目标

使用Django+HTML+CSS+JS开发一个含登录界面的在线博客网站,用户可以通过网站发布博客,管理员可以登录后台管理博客。

本项目共分为六大模块:

  1. 用户注册页面
  2. 用户登录页面
  3. 主页面
  4. 博客发布页面
  5. 博客搜索页面
  6. 后台管理页面

实验内容

安装依赖库

在正式开始之前,我们需要先安装本次实战项目所依赖的库:

  • django:一个高级的Python Web框架。

安装命令:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django

1.登录页面

{% extends 'base.html' %}
{% load static %}

{% block page_title %}
    登录界面
{% endblock %}


{% block page_head %}
<link rel="stylesheet" href="{% static 'user/css/login.css' %}">
{% endblock %}

{% block page_content %}
<div id="content">
    <div id="left_img"><img src="{% static 'common/image/want.png' %}"></div>
    <div id="right_content">
        <div id="login_title">
            <span>账号登录</span>
        </div>
        {% if form.non_field_errors %}
        <div id="form_error">
            <div id="close_error">X</div>
            {{ form.non_field_errors }}
        </div>
        {% endif %}
        <div id="login_form">
            <form action="{% url 'login_handler' %}" method="POST">
                {% csrf_token %}
                <div class="form-group">{{ form.username }}</div>
                <div class="form-group">{{ form.password }}</div>
                <button type="submit" class="btn btn-danger btn-block">登录</button>
            </form>
        </div>
        <div id="login_thrid">
            <p>第三方登录</p>
            <p><img src="{% static 'common/image/icons.png' %}"></p>
            <p><span>还没有WANT账号?</span>
            <p><a href="{% url 'register' %}">立即注册</a></p>
            </p>
        </div>
    </div>
</div>
<div id="page_bottom">
    <div style="text-align:center;">
        <p style="height: 30px;margin-top:20px;border-bottom: 1px solid #c4c4c4;">
            <span style="overflow: hidden;height: 16px;display: inline-block;">
                    <img src="{% static 'common/image/qq_icon.png' %}" style="width: 17px;height: 120px">
                </span>网站客服&nbsp;
            <span style="overflow: hidden;height: 16px;display: inline-block;">
                    <img src="{% static 'common/image/weibo_icon.png' %}" style="width: 19px;height: 120px">
                </span>微博客服&nbsp;
            <span style="overflow: hidden;height: 16px;display: inline-block;">
                    <img src="{% static 'common/image/email_icon.png' %}" style="width: 16px;height: 126px">
                </span>Want595@want.com&nbsp;
            <span style="overflow: hidden;height: 16px;display: inline-block;">
                    <img src="{% static 'common/image/phone_icon.png' %}" style="width: 16px;height: 120px">
                </span>6666 6666&nbsp;|&nbsp;版权所有:Want595
        </p>
    </div>
</div>
{% endblock %}

{% block page_script %}

{% endblock %}

这段代码是一个登录界面的模板:


首先,在页面头部进行了一些设置,包括继承了一个名为base.html的基础模板,加载了静态文件,并定义了页面标题为"登录界面"。


接着,在页面的内容部分进行了布局和样式的设置。左侧是一个图片,使用了静态文件中的一张图片。右侧是登录表单,包括一个登录标题和一个表单。表单使用了Django的表单组件,包含用户名和密码两个输入框。如果表单提交出现错误,会显示错误信息。


在登录表单下方是一个第三方登录选项,显示了一些第三方登录平台的图标。最后是一个底部信息栏,包含了网站客服的联系方式和版权信息。


最后,在页面的底部进行了一些脚本的设置。


总的来说,这段代码实现了一个简单的登录界面,包含了表单输入和错误提示等功能,并进行了一些布局和样式的设置。

2.注册页面

{% extends 'base.html' %}
{% load static %}

{% block page_title %}
    注册用户
{% endblock %}

{% block page_head %}
    <link rel="stylesheet" href="{% static 'user/css/register.css' %}">
{% endblock %}

{% block page_content %}
    <div id="bg_left">
        <p id="logo"><a href="{% url 'home' %}">WANT</a></p>
        <p id="msg">人生苦短,Python当歌!</p>
        <img src="{% static 'common/image/background.png' %}">
    </div>
    <div id="bg_right">
        <a id="login" href="{% url 'login' %}">登录</a>
        <div id="content">
            <div id="register_title">欢迎注册</div>
            {% if form.non_field_errors %}
                <div id="form_error">
                    <div id="close_error">X</div>
                    {{ form.non_field_errors }}
                </div>
            {% endif %}
            <div id="register_form">
                <form action="{% url 'register_handler' %}" method="POST">
                    {% csrf_token %}
                    <div class="form-group">
                        <label for="{{ form.username.id_for_label }}">用户名</label>
                        {{ form.username }}
                    </div>
                    <div class="form-group">
                        <label for="{{ form.password.id_for_label }}">密码</label>
                        {{ form.password }}
                    </div>
                    <div class="form-group">
                        <label for="{{ form.confirm_password.id_for_label }}">确认密码</label>
                        {{ form.confirm_password }}
                    </div>
                    <button type="submit" class="btn btn-danger btn-block">确认注册</button>
                </form>
            </div>
            <div id="note">
                <span><img style="width: 16px;height: 16px;" src="{% static 'common/image/already.png' %}"></span>
                <span>我已仔细阅读并接受</span>
                <span><a href="#">WANT用户服务条款</a></span>
                <br>
                <br>
                <br>
                <br>
            </div>
        </div>
    </div>
{% endblock %}

{% block page_script %}

{% endblock %}

这段代码是一个注册界面的模板:


首先,在页面头部进行了一些设置,包括继承了一个名为base.html的基础模板,加载了静态文件,并定义了页面标题为"注册用户"。


接着,在页面的内容部分进行了布局和样式的设置。页面分为左右两部分,左侧是一个包含网站logo和一句口号的背景图。右侧是注册表单,包括一个注册标题和一个表单。表单使用了Django的表单组件,包含了用户名、密码和确认密码三个输入框。如果表单提交出现错误,会显示错误信息。


在右侧注册表单下方是一个登录链接,可以跳转到登录页面。最后是一个底部的说明文字,包含了一个已阅读的图标和用户服务条款的链接。


最后,在页面的底部进行了一些脚本的设置。


总的来说,这段代码实现了一个简单的注册界面,包含了表单输入和错误提示等功能,并进行了一些布局和样式的设置。用户可以在此页面输入用户名和密码进行注册,并可以跳转到登录页面进行登录操作。

3.主页面

{% extends 'want.html' %}
{% load static %}

{% block page_title %}WANT{% endblock %}

{% block page_head %}
    <link rel="stylesheet" href="{% static 'blog/css/home.css' %}">
{% endblock %}

{% block page_content %}
    <div id="left_nav">
        <ul>
            <li id="to_top">返回顶部</li>
        </ul>
    </div>
    <div id="top_ad"></div>
    <div id="top_ten"></div>
    <ul id="blog_ul">
        {% for blog in blogs %}
            <li>
                <p><a href="{% url 'blog_detail' blog.id %}">{{ blog.title }}</a></p>
                <p>
                    <span>{{ blog.user.username }}</span>
                    <span>{{ blog.timestamp }}</span>
                    <span><span>{{ blog.comm_count }}</span>&nbsp;评论</span>
                    <span><span>{{ blog.view_count }}</span>&nbsp;阅读</span>
                </p>
            </li>
        {% endfor %}
    </ul>
{% endblock %}

{% block page_script %}
    <script type="text/javascript" src="{% static 'blog/js/home.js' %}"></script>
{% endblock %}

这段代码是一个首页模板:


首先,在页面头部进行了一些设置,包括继承了一个名为want.html的基础模板,加载了静态文件,并定义了页面标题为"WANT"。


接着,在页面的内容部分进行了布局和样式的设置。页面分为左侧导航栏、顶部广告、排行榜和博客列表。左侧导航栏只包含一个用于返回顶部的链接。顶部广告使用了一个占位符div,可以用来展示广告图片或其他内容。排行榜使用了一个占位符div,可以用来展示热门博客或其他排行榜内容。博客列表使用了一个ul列表,通过遍历blogs变量来展示每篇博客的标题、作者、发布时间、评论数量和阅读数量。


在页面的底部进行了一些脚本的设置,包括加载了一个名为home.js的脚本文件。


总的来说,这段代码实现了一个简单的首页界面,展示了一些基本的内容,并进行了一些布局和样式的设置。用户可以在此页面浏览博客列表,并通过导航栏返回顶部。其中的顶部广告和排行榜可以通过替换占位符div的内容来展示不同的信息。

4.博客发布页面

{% extends 'want.html' %}
{% load static %}

{% block page_title %}
    发布博客
{% endblock %}

{% block page_head %}
    <link rel="stylesheet" href="{% static 'blog/css/blog_edit.css' %}">
{% endblock %}

{% block page_content %}
    <div id="edit_form">
        <form action="{% url 'blog_edit' %}" method="POST">
            {% csrf_token %}
            <span>{{ blog.user.username }}</span>
            <div class="form-group">{{ form.blog_title }}</div>
            <div id="content" class="form-group">{{ form.blog_content }}</div>
            <button type="submit" class="btn btn-danger btn-block">提交</button>
        </form>
    </div>
{% endblock %}

这段代码是一个HTML模板,用于展示发布博客的页面。下面对其中的代码进行具体分析。


  1. {% extends 'want.html' %}:该语句表示该模板继承自名为"want.html"的父模板。


  1. {% load static %}:该语句用于加载静态文件。


  1. {% block page_title %} ... {% endblock %}:这两句代码定义了一个命名块,用于设置页面标题。具体的标题内容被放置在这两句代码的中间。


  1. {% block page_head %} ... {% endblock %}:这两句代码定义了另一个命名块,用于设置页面头部的资源引入。具体的资源引入代码被放置在这两句代码的中间。


  1. {% block page_content %} ... {% endblock %}:这两句代码定义了另一个命名块,用于设置页面的主要内容。具体的页面内容代码被放置在这两句代码的中间。


  1. <link rel="stylesheet" href="{% static 'blog/css/blog_edit.css' %}">:这是一个CSS样式表的引入语句,路径由静态文件加载器进行解析。


  1. <div id="edit_form"> ... </div>:这段代码定义了一个具有"id"属性为"edit_form"的div标签,用于包含发布博客的表单。


  1. <form action="{% url 'blog_edit' %}" method="POST"> ... </form>:这是一个表单标签,action属性指定了表单提交的URL地址,method属性指定了表单提交的方法为POST。


  1. {% csrf_token %}:这是一个用于防止跨站请求伪造的安全标签,用于生成表单中的CSRF令牌。


  1. <span>{{ blog.user.username }}</span>:这是一个span标签,用于显示博客作者的用户名。


  1. <div class="form-group">{{ form.blog_title }}</div>:这是一个div标签,具有"class"属性为"form-group",用于包裹博客标题的输入表单。


  1. <div id="content" class="form-group">{{ form.blog_content }}</div>:这是一个div标签,具有"id"属性为"content"和"class"属性为"form-group",用于包裹博客内容的输入表单。


  1. <button type="submit" class="btn btn-danger btn-block">提交</button>:这是一个提交按钮,具有"class"属性为"btn btn-danger btn-block",用于提交博客表单。

这段代码实现了一个简单的发布博客页面,包含了博客标题、博客内容的输入表单,以及一个提交按钮。

5.搜索页面

主要代码

{% extends 'want.html' %}
{% load static %}

{% block page_title %}
    搜索结果
{% endblock %}

{% block page_head %}
    <link rel="stylesheet" href="{% static 'blog/css/search_results.css' %}">
{% endblock %}

{% block page_content %}

……请下载项目代码后查看哦~

这段代码是一个HTML模板,用于展示搜索结果页面。下面对其中的代码进行具体分析。

  1. {% extends 'want.html' %}:该语句表示该模板继承自名为"want.html"的父模板。
  2. {% load static %}:该语句用于加载静态文件。
  3. {% block page_title %} ... {% endblock %}:这两句代码定义了一个命名块,用于设置页面标题。具体的标题内容被放置在这两句代码的中间。
  4. {% block page_head %} ... {% endblock %}:这两句代码定义了另一个命名块,用于设置页面头部的资源引入。具体的资源引入代码被放置在这两句代码的中间。
  5. {% block page_content %} ... {% endblock %}:这两句代码定义了另一个命名块,用于设置页面的主要内容。具体的页面内容代码被放置在这两句代码的中间。
  6. <link rel="stylesheet" href="{% static 'blog/css/search_results.css' %}">:这是一个CSS样式表的引入语句,路径由静态文件加载器进行解析。
  7. <div id="content"> ... </div>:这是一个具有"id"属性为"content"的div标签,用于包含整个搜索结果内容。
  8. <div id="content_head"> ... </div>:这是一个具有"id"属性为"content_head"的div标签,用于包含搜索结果页面的头部部分。
  9. <div id="sort"> ... </div>:这是一个具有"id"属性为"sort"的div标签,用于包含排序方式的链接。
  10. <div class="input_form"> ... </div>:这是一个具有"class"属性为"input_form"的div标签,用于包含搜索输入框。
  11. <form class="form-inline"> ... </form>:这是一个具有"class"属性为"form-inline"的form标签,用于包裹搜索输入框和提交按钮。
  12. <input type="text" class="form-control" value="" placeholder="">:这是一个输入框,具有"type"属性为"text",和"class"属性为"form-control"。
  13. <button type="submit" class="btn btn-danger">搜索</button>:这是一个提交按钮,具有"type"属性为"submit"和"class"属性为"btn btn-danger"。
  14. <div id="content_body"> ... </div>:这是一个具有"id"属性为"content_body"的div标签,用于包含搜索结果的主体部分。
  15. <ul> ... </ul>:这是一个无序列表,用于包含搜索结果项。
  16. <li> ... </li>:这是一个列表项,包含了每一条搜索结果的相关信息。
  17. <p class="blog_title"><a href="#">博客1</a></p>:这是一个具有"class"属性为"blog_title"的p标签,内部包含了一个链接。
  18. <p class="blog_info"> ... </p>:这是一个具有"class"属性为"blog_info"的p标签,用于包含博客的作者、日期和浏览量等信息。
  19. <p class="blog_content">这是一篇博客……</p>:这是一个具有"class"属性为"blog_content"的p标签,用于显示博客的内容。
  20. <div id="content_footer"> ... </div>:这是一个具有"id"属性为"content_footer"的div标签,用于包含搜索结果页面的底部部分。
  21. <ul class="pagination"> ... </ul>:这是一个具有"class"属性为"pagination"的无序列表,用于分页显示搜索结果。
  22. <div id="page_bottom"> ... </div>:这是一个具有"id"属性为"page_bottom"的div标签,用于包含页面底部的版权信息。

这段代码实现了一个简单的搜索结果页面,包含了排序方式选择、搜索输入框、搜索结果展示和分页功能。

运行结果

  1. 注册界面

  1. 登录界面

  1. 主界面

  1. 博客发布界面

  1. 后台管理界面

写在后面

我是一只有趣的兔子,感谢你的喜欢!

目录
相关文章
|
9月前
|
移动开发 前端开发 JavaScript
征信报告修改器,征信报告生成器,制作软件无痕修改软件【js+html+css】
本项目为信用评分模拟器教学工具,采用HTML5实现,仅供学习参考。核心功能通过JavaScript构建,包含虚拟数据生成、权重分配及信用因素分析(如还款记录、信用使用率等)。
|
9月前
|
前端开发 JavaScript
个人征信电子版无痕修改, 个人信用报告pdf修改,js+html+css即可实现【仅供学习用途】
本代码展示了一个信用知识学习系统的前端实现,包含评分计算、因素分析和建议生成功能。所有数据均为模拟生成
|
9月前
|
存储 前端开发 JavaScript
仿真银行app下载安装, 银行卡虚拟余额制作app,用html+css+js实现逼真娱乐工具
这是一个简单的银行账户模拟器项目,用于学习前端开发基础。用户可进行存款、取款操作,所有数据存储于浏览器内存中
|
9月前
|
前端开发
个人征信PDF无痕修改软件,个人征信模板可编辑,个人征信报告p图神器【js+html+css仅供学习用途】
这是一款信用知识学习系统,旨在帮助用户了解征信基本概念、信用评分计算原理及信用行为影响。系统通过模拟数据生成信用报告,涵盖还款记录
|
9月前
|
前端开发 JavaScript 容器
制作b超单生成器, 假怀孕b超单图片制作, p图医院证明【css+html+js装逼恶搞神器】
本资源提供一个适合用于熟人之间恶搞的工具,效果逼真,仅供学习参考与娱乐。包含前端技术学习要点:语义化布局、响应式设计、Flexbox、图片自适应
|
9月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
500 1
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
835 45
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
830 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
前端开发 搜索推荐 算法
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
521 12
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发

热门文章

最新文章

  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    412
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    320
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    296
  • 4
    (CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
    199
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    415
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    607
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    750
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    204
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    603
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    367