web一课一得


发展历程

互联网的兴起:Web 的起源可以追溯到 20 世纪 60 年代的互联网。互联网最初是由美国国防部的 ARPANET 建立的,用于实现科学研究机构之间的数据交换和共享。

World Wide Web(万维网)的出现:Web 的概念由 Tim Berners-Lee 在 1989 年提出,并在 1991 年发布了第一个 Web 服务器和浏览器。万维网的目标是将信息以超文本方式连接起来,使用户可以通过链接浏览和访问各种资源。

HTML 的发展:HTML 是 Web 页面的标记语言,最早版本的 HTML 包含了基本的文本、图像和链接元素。随着 Web 的发展,HTML 不断演变和更新,增加了更多的标签和功能,如表单、多媒体、样式等。

CSS 的引入:由于 HTML 的布局和样式能力有限,1996 年 CSS(层叠样式表)被引入,用于控制 Web 页面的外观和样式。CSS 可以将样式与内容分离,提供更灵活和可维护的页面设计。

JavaScript 的兴起:JavaScript 是一种脚本语言,最早用于处理简单的页面交互效果。随着 Web 技术的发展,JavaScript 在浏览器端的功能越来越强大,可以实现复杂的动态页面效果和交互逻辑。

Web 标准的制定:为了推动 Web 技术的发展和互操作性,W3C(World Wide Web Consortium)成立于 1994 年,负责制定和推广 Web 标准。Web 标准包括 HTML、CSS、DOM(文档对象模型)等规范,确保不同浏览器之间的兼容性和一致性。

Web 应用程序的兴起:随着 Web 技术的成熟和互联网的普及,Web 应用程序开始迅速发展。Web 应用程序可以通过浏览器访问,无需安装额外的软件,使用户能够在线完成各种任务,如电子邮件、购物、社交网络等。

移动互联网的崛起:随着智能手机和移动设备的普及,移动互联网成为 Web 技术发展的重要方向。

以上是 Web 背景的主要内容,这些背景知识可以帮助我们理解 Web 技术的发展历程和基本原理,为学习和应用 Web 技术提供了基础。

项目技术
前端技术:

HTML/CSS:用于定义页面结构和样式。
JavaScript:用于实现页面的交互和动态效果。
前端框架:如React、Angular、Vue等,提供了组件化开发、状态管理、路由等功能。
后端技术:

服务器端编程语言:如Java、Python、Ruby、PHP等,用于处理客户端请求、业务逻辑处理等。
后端框架:如Spring、Django、Ruby on Rails、Laravel等,提供了快速搭建后端应用的功能。
数据库:如MySQL、PostgreSQL、MongoDB等,用于存储和管理数据。
数据交互和通信:

HTTP/HTTPS:用于前后端之间的通信和数据传输。
AJAX:通过异步请求和响应,在不刷新整个页面的情况下更新部分页面内容。
RESTful API:用于设计和实现可扩展的、基于资源的 Web 服务接口。
安全性:

用户认证和授权:如使用用户名和密码登录、OAuth等。
数据加密和传输安全:如使用SSL/TLS协议进行数据加密和传输保护。
防御常见的Web攻击:如跨站脚本攻击(XSS)、跨站请求伪造(CSRF)、SQL注入等。
部署和运维:

Web 服务器:如Apache、Nginx等,用于部署和处理客户端请求。
容器化技术:如Docker、Kubernetes等,提供了便捷的应用部署和管理方式。
日志记录和监控:如ELK Stack、Prometheus等,用于收集和分析应用日志和性能数据。
前端构建工具和包管理器:

打包工具:如Webpack、Parcel等,用于将多个前端资源打包成一个或多个文件。
包管理器:如npm、Yarn等,用于管理和安装前端依赖包。
版本控制和团队协作:

版本控制系统:如Git,用于代码版本管理和团队协作。
协作工具:如GitHub、GitLab等,用于团队协作、代码审查和持续集成。
项目构架 
Web 项目架构是指用于组织和设计 Web 应用程序的整体结构和组件。

单层架构(Monolithic Architecture): 单层架构是最简单的架构形式,将所有的应用逻辑都集中在一个单一的应用程序中。前端、后端和数据库交互都在同一个应用中处理。这种架构简单易懂,适合小型和简单的项目。

分层架构(Layered Architecture): 分层架构将应用程序划分为不同的层,每个层负责不同的功能。

表现层(Presentation Layer):处理用户界面和用户交互逻辑。
业务逻辑层(Business Logic Layer):处理业务相关的逻辑和规则。
数据访问层(Data Access Layer):负责与数据库或其他数据源进行 [Something went wrong, please try again later.]
应用分层的使用 
应用分层介绍


Web应用分层是指将应用程序按照功能模块和职责进行分离,从而提高应用程序的可维护性、可扩展性和可重用性。常见的Web应用分层概念包括以下几个层次:

表现层(Presentation Layer):


表现层是Web应用程序的最外层,负责接收用户请求、呈现响应结果。它通常采用HTML、CSS和JavaScript等技术实现,用于创建用户界面和交互效果。

<!DOCTYPE html>
<html>
<head>
    <title>示例页面</title>
    <link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
    <h1>欢迎访问示例页面</h1>
    <p>这是一个示例页面,用于演示HTML的基本结构。</p>
    <img src="image.jpg" alt="示例图片">
    <a href="https://www.example.com">访问示例链接</a>
    <script src="scripts.js"></script>
</body>
</html>

document.addEventListener('DOMContentLoaded', function() {
    var button = document.getElementById('myButton');
    button.addEventListener('click', function() {
        alert('按钮被点击了!');
    });
});

控制层(Controller Layer):
控制层负责处理表现层发送的请求,根据请求的内容调用模型层进行业务逻辑处理,并返回响应结果给表现层。控制层通常由Web框架提供,如Spring MVC、Django等。
from flask import Flask, request, jsonify
 
app = Flask(__name__)
 
# 定义路由,处理用户请求
@app.route('/hello', methods=['GET'])
def hello():
    name = request.args.get('name')
    if name:
        return jsonify({'message': 'Hello, ' + name + '!'})
    else:
        return jsonify({'error': '参数name未提供'})
 
if __name__ == '__main__':
    app.run()

————————————————

模型层(Model Layer):
模型层包含应用程序的核心业务逻辑,负责处理数据和状态的变更。它通常包含数据访问对象(DAO)、业务逻辑对象(BO)等,用于封装数据库操作和业务处理。
from flask_sqlalchemy import SQLAlchemy
 
db = SQLAlchemy()
 
# 定义模型类
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), nullable=False)
 
    def __init__(self, name):
        self.name = name
 
    def save(self):
        db.session.add(self)
        db.session.commit()
 
    def delete(self):
        db.session.delete(self)
        db.session.commit()
 
    @staticmethod
    def get_all():
        return User.query.all()
 
    @staticmethod
    def get_by_id(user_id):
        return User.query.get(user_id)

数据访问层(Data Access Layer):
数据访问层负责与数据库进行交互,实现数据的增删改查等操作。它通常包含数据访问对象(DAO)、ORM框架等,用于封装数据库操作,提供对外的数据访问接口。
from flask_sqlalchemy import SQLAlchemy
 
db = SQLAlchemy()
 
# 定义访问类
class UserRepository:
 
    @staticmethod
    def add_user(user):
        db.session.add(user)
        db.session.commit()
 
    @staticmethod
    def delete_user(user):
        db.session.delete(user)
        db.session.commit()
 
    @staticmethod
    def get_all_users():
        return User.query.all()
 
    @staticmethod
    def get_user_by_id(user_id):
        return User.query.get(user_id)

服务层(Service Layer):
服务层是应用程序的中间层,负责处理业务逻辑和数据访问之间的交互。它通常包含业务逻辑对象(BO)、数据访问对象(DAO)等,用于提供高级别的业务操作和数据处理。
from models import UserRepository
 
class UserService:
 
    @staticmethod
    def create_user(name):
        user = User(name)
        UserRepository.add_user(user)
 
    @staticmethod
    def delete_user(user_id):
        user = UserRepository.get_user_by_id(user_id)
        if user:
            UserRepository.delete_user(user)
 
    @staticmethod
    def get_all_users():
        return UserRepository.get_all_users()
 
    @staticmethod
    def get_user(user_id):
        return UserRepository.get_user_by_id(user_id)

工具层(Utility Layer):
工具层包含应用程序的辅助工具和库,用于提供共享的功能和实用工具。例如,日志库、缓存库、加密库等,用于提供应用程序所需的各种工具和支持。
异常处理
错误页面:

自定义错误页面:为常见的HTTP错误状态码(如404 Not Found)创建自定义错误页面,向用户提供友好的错误提示信息。
全局错误处理:配置全局错误处理机制,捕获未处理的异常,并显示相应的错误页面。
异常日志记录:

将异常信息记录到日志文件中,以便后续分析和排查问题。可以使用日志库(如Log4j、Logback)来实现日志记录功能。
记录异常的相关信息,如时间戳、请求URL、请求参数、用户信息等,有助于定位和解决问题。
import logging
 
logger = logging.getLogger(__name__)
 
try:
    # do something
except Exception as e:
    logger.exception("An error occurred: %s", str(e))
异常处理中间件:

在Web框架中使用异常处理中间件,捕获并处理异常。例如,在Django框架中使用@exception_handler装饰器来定义全局的异常处理方法。
通过异常处理中间件,可以统一处理异常,返回适当的错误响应,避免将异常信息直接暴露给用户。
输入验证和过滤:

对用户输入进行验证和过滤,以防止恶意输入和安全漏洞。例如,可以使用正则表达式验证邮箱地址或过滤HTML标签。
在接收用户输入之前,对其进行严格的验证和过滤,确保输入的数据符合预期,并防止潜在的安全风险。
异常处理策略:

定义适当的异常处理策略,根据不同的异常类型采取不同的处理方式。例如,对于数据库连接失败的异常,可以尝试重新连接或返回错误信息。
在处理异常时,需要遵循最佳实践,避免将敏感信息暴露给用户,同时提供有用的错误提示信息,以帮助用户理解问题和解决方案。
测试和调试:

编写单元测试和集成测试,覆盖异常情况,确保异常处理的正确性和稳定性。
在开发和部署过程中,通过日志记录和调试工具来识别和解决异常情况,确保应用程序的健壮性。
@app.errorhandler(Exception)
def handle_error(e):
    code = 500
    if isinstance(e, HTTPException):
        code = e.code
    message = str(e)
    return jsonify({
        "error": {
            "code": code,
            "message": message
        }
    }), code
 

业务对象建模的实践
确定业务对象 首先需要确定应用程序的业务对象,例如用户、订单、商品等。一般情况下,业务对象应该与业务域相对应,并符合业务场景的特点。

定义业务对象属性 在确定业务对象之后,可以定义其属性,如用户包含用户名、密码、邮箱等属性。属性应该满足业务需求,并且尽可能地避免冗余和不必要的信息。

设计业务对象方法 业务对象还应该定义一些方法,例如在用户对象中,可以定义登录、注册、修改密码等方法。方法应该满足业务需求,具有一定的复用性和可扩展性。

考虑业务对象关系 在设计业务对象时,还需要考虑业务对象之间的关系,例如一个订单对象可能包含多个商品对象。可以使用关联属性、外键等方式来实现业务对象之间的关系。

实现业务对象 定义好业务对象属性和方法后,需要实现业务对象。可以使用面向对象编程语言如 Python、Java 等来实现业务对象,并将其封装在服务层中。
————————————————
版权声明:本文为CSDN博主「FLLLLLDL」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/FLLLLLDL/article/details/135135531

  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值