Web实战丨基于Django与HTML的新闻发布系统(二)

简介: Web实战丨基于Django与HTML的新闻发布系统(二)

Web实战丨基于Django与HTML的新闻发布系统:https://developer.aliyun.com/article/1534698


6.配置模板文件

本项目共需要创建六个模板文件,首先我们需要在"news"目录下新建一个"templates"子目录,然后在"templates"目录中创建六个文件(页面):

  • home:主页
<html lang="en">
<head>
    <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="A layout example that shows off a blog page with a list of posts.">

    <title>新闻系统</title>
    <link rel="stylesheet" href="http://labfile.oss.aliyuncs.com/courses/487/pure-min.css">
    <link rel="stylesheet" href="http://labfile.oss.aliyuncs.com/courses/487/grids-responsive-min.css">
    <link rel="stylesheet" href="http://labfile.oss.aliyuncs.com/courses/487/blog.css">

</head>
<body>
<div id="layout" class="pure-g">
    <div class="sidebar pure-u-1 pure-u-md-1-4">
        <div class="header">
            <h1 class="brand-title"><a href="#"> Want595最新要闻</a>

……具体代码需要下载后查看哦~
<h

该HTML模板文件用于渲染新闻系统的页面布局。


页面布局分为两个部分:侧边栏(sidebar)和内容区域(content)。


侧边栏部分包含以下内容:


网站标题和标语,用<h1>和<h2>标签进行展示。


导航栏,包含一个无序列表(<ul>),其中的列表项(<li>)包含以下内容:


如果用户已经登录,显示用户的用户名和一个退出按钮。

如果用户未登录,显示一个注册按钮和一个登录按钮。

内容区域部分使用一个<div>元素包裹,用于渲染具体的页面内容。在模板中使用了一个{% block content %}标签,表示该区域是一个可被子模板继承并填充内容的区域。


该模板文件使用了PureCSS框架提供的样式表,以实现页面的样式和布局。


通过使用该模板文件,可以方便地创建新闻系统的页面布局,并根据具体需求填充和扩展页面内容。

  • regist:用户注册页面
{% extends 'home.html' %}
 
{% block content %}
    <h1>注册页面</h1>
    <form method="POST" enctype="multipart/form-data">
{% csrf_token %}
        {{uf.as_p}}
        <input type="submit" value="OK" />
    </form>
{% endblock %}

这个模板继承自一个名为home.html的父模板,通过{% extends 'home.html' %}指令进行继承。


在模板中使用了一个{% block content %}标签来填充内容,表示该区域是可以被父模板中同名块所替换的区域。


具体内容如下:


  1. 使用<h1>标签显示了一个标题为"注册页面"的标题。


  1. 使用<form>标签创建了一个表单,其中method属性指定了使用POST方法提交表单数据,enctype属性指定了表单数据的编码方式为multipart/form-data。


  1. 使用{% csrf_token %}标签生成一个CSRF令牌,用于防止跨站请求伪造。


  1. 使用{{ uf.as_p }}渲染了一个表单对象uf,其中的as_p方法会将表单字段渲染为<p>标签的形式,方便显示字段和输入框。


  1. 使用<input>标签创建了一个类型为"submit"的按钮,显示文本为"OK",用于提交表单。


  1. 通过这个模板,可以在注册页面中显示一个表单,接收用户的注册信息,并通过提交按钮将信息发送给服务器进行处理。
  • regists:注册成功或失败页面
{% extends 'home.html' %}
 
{% block content %}
 
{{registAdd}}
 
<br>
================
<br>
{% if username %}
注册失败,{{ username }}已存在!
<a href="/regist">注册</a>
{% else %}
注册成功!
<a href="/login">登录</a>
{% endif %}
 
{% endblock %}

这个模板继承自一个名为home.html的父模板,通过{% extends 'home.html' %}指令进行继承。

在模板中使用了一个{% block content %}标签来填充内容,表示该区域是可以被父模板中同名块所替换的区域。

具体内容如下:

  1. 使用{{registAdd}}语句输出了一个变量registAdd的值。根据上下文来看,这个变量可能是在视图函数中传递给模板的。


  1. 使用<br>标签插入一个换行。


  1. 使用{% if username %}条件语句,判断变量username是否存在。


  1. 如果username存在,输出"注册失败"和username已存在的提示信息,同时提供一个"注册"的链接用于重新注册。


  1. 如果username不存在,输出"注册成功!"的提示信息,同时提供一个"登录"的链接用于跳转到登录页面。

通过这个模板,可以根据不同的情况在注册结果页面显示不同的提示信息,给用户提供相应的操作选项。

  • login:用户登录页面
{% extends 'home.html' %}
 
{% block content %}
 
<div>
        <form action="/login/" method="POST">{% csrf_token %}
            <h2>请登录</h2>
            <input type="text" name="username" />
            <input type="password" name="password" />
            <button type="submit">登录</button>
            <p style="color: red">{{ login_error }}</p>
        </form>
</div>
 
{% endblock %}

这个模板继承自一个名为home.html的父模板,通过{% extends 'home.html' %}指令进行继承。

在模板中使用了一个{% block content %}标签来填充内容,表示该区域是可以被父模板中同名块所替换的区域。

具体内容如下:

  1. 使用<div>元素包裹了一个表单,该表单的提交目标为"/login/",使用POST方法提交数据。


  1. 使用{% csrf_token %}模板标签添加一个跨站请求伪造保护的令牌。


  1. 使用<h2>标签显示"请登录"的标题。


  1. 使用两个<input>标签分别用于输入用户名和密码,分别对应name="username"和name="password"。


  1. 使用<button>标签显示一个"登录"按钮。


  1. 使用<p>标签显示一个红色文本,该文本内容由login_error变量提供,用于显示登录出现的错误信息。

通过这个模板,用户可以在登录页面输入用户名和密码,并点击登录按钮进行登录操作。如果登录失败,会显示相应的错误信息。

  • article:新闻页面
{% extends 'home.html' %}
 
{% block content %}
 
<h2>新闻列表</h2>
{% for article in article_list %}
    <h3><a href="{% url 'detail' id=article.id %}">{{ article.title }}</a></h3>
{% endfor %}
 
{% endblock %}

这个模板继承自一个名为home.html的父模板,通过{% extends 'home.html' %}指令进行继承。

在模板中使用了一个{% block content %}标签来填充内容,表示该区域是可以被父模板中同名块所替换的区域。

具体内容如下:

  1. 使用<h2>标签显示"新闻列表"的标题。


  1. 使用{% for article in article_list %}模板标签开始一个循环,遍历article_list列表中的每个元素。


  1. 在循环内部,使用<h3>标签显示每篇文章的标题,并且使用{% url 'detail' id=article.id %}生成文章详情页面的链接。


  1. 使用{% endfor %}结束循环。

通过这个模板,可以在页面上显示新闻列表,并且每个新闻标题都有对应的链接可以跳转到相应的新闻详情页面。

  • detail:新闻详情页面
{% extends 'home.html' %}
 
{% block content %}
 
<h2>{{ article.title }}</h2>
 
{{ article.content }}
 
{% endblock %}

这个模板继承自一个名为home.html的父模板,通过{% extends 'home.html' %}指令进行继承。


在模板中使用了一个{% block content %}标签来填充内容,表示该区域是可以被父模板中同名块所替换的区域。


具体内容如下:


使用<h2>标签显示article对象的标题,通过{{ article.title }}获取到文章标题的值。


使用{{ article.content }}显示article对象的内容,通过{{ article.content }}获取到文章内容的值。

通过这个模板,可以在页面上显示文章的标题和内容。

7.创建数据库

在终端输入以下命令创建(迁移)数据库

python manage.py makemigrations
python manage.py migrate

8.启动项目

  1. 我们首先需要创建一个超级用户(管理员),用于登录后台
python manage.py createsuperuser
  1. 我创建了一个超级用户admin,并设置密码为123456

  1. 在终端输入以下命令启动项目
python manage.py runserver
• 1
  1. 如果出现以下网址,说明项目启动成功啦!


运行结果

  1. 主页


  1. 注册页面


  1. 注册成功页面


  1. 登录页面


  1. 新闻页面


  1. 新闻详情页面


7.管理员页面

写在后面

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

目录
相关文章
|
15天前
|
移动开发 开发者 HTML5
构建响应式Web界面:Flexbox与Grid的实战应用
【10月更文挑战第22天】随着互联网的普及,用户对Web界面的要求越来越高,不仅需要美观,还要具备良好的响应性和兼容性。为了满足这些需求,Web开发者需要掌握一些高级的布局技术。Flexbox和Grid是现代Web布局的两大法宝,它们分别由CSS3和HTML5引入,能够帮助开发者构建出更加灵活和易于维护的响应式Web界面。本文将深入探讨Flexbox和Grid的实战应用,并通过具体实例来展示它们在构建响应式Web界面中的强大能力。
32 3
|
10天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
87 44
|
14天前
|
存储 消息中间件 缓存
构建互联网高性能WEB系统经验总结
构建互联网高性能WEB系统经验总结
|
5天前
|
API 数据库 开发者
深度剖析Django/Flask:解锁Web开发新姿势,让创意无限延伸!
在Web开发领域,Django与Flask如同两颗璀璨的星辰,各具特色。Django提供全栈解决方案,适合快速开发复杂应用;Flask则轻量灵活,适合小型项目和API开发。本文通过问答形式,深入解析两大框架的使用方法和选择策略,助你解锁Web开发新技能。
14 2
|
5天前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
17 1
|
8天前
|
SQL 负载均衡 安全
安全至上:Web应用防火墙技术深度剖析与实战
【10月更文挑战第29天】在数字化时代,Web应用防火墙(WAF)成为保护Web应用免受攻击的关键技术。本文深入解析WAF的工作原理和核心组件,如Envoy和Coraza,并提供实战指南,涵盖动态加载规则、集成威胁情报、高可用性配置等内容,帮助开发者和安全专家构建更安全的Web环境。
20 1
|
11天前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
26 2
|
11天前
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
42 2
|
28天前
|
数据库 数据安全/隐私保护 数据库管理
#765372#基于django和neo4j的通用数据展示系统
#765372#基于django和neo4j的通用数据展示系统
20 1
|
24天前
|
移动开发 前端开发 JavaScript
前端开发实战:利用Web Speech API之speechSynthesis实现文字转语音功能
前端开发实战:利用Web Speech API之speechSynthesis实现文字转语音功能
117 0
下一篇
无影云桌面