<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>后端框架 on ClearSec Wiki</title><link>https://www.clearsec.org/wikis/skills/backend/</link><description>Recent content in 后端框架 on ClearSec Wiki</description><generator>Hugo</generator><language>zh-cn</language><atom:link href="https://www.clearsec.org/wikis/skills/backend/index.xml" rel="self" type="application/rss+xml"/><item><title>ExpressJS</title><link>https://www.clearsec.org/wikis/skills/backend/expressjs/express-js/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.clearsec.org/wikis/skills/backend/expressjs/express-js/</guid><description>&lt;h1 id="expressjs"&gt;ExpressJS&lt;/h1&gt;
&lt;p&gt;Express 是一个简洁而灵活的 Node.js Web 应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用，和丰富的 HTTP 工具。&lt;/p&gt;
&lt;p&gt;使用 Express 可以快速地搭建一个完整功能的网站，但是，我们一般更倾向于使用 Express 来快速搭建&lt;strong&gt;网站后端&lt;/strong&gt;。&lt;/p&gt;
&lt;div class="td-alert td-alert--md alert alert-note" role="alert"&gt;&lt;div class="td-alert-heading alert-heading" role="heading"&gt;说明&lt;/div&gt;
 &lt;div class="td-alert-body"&gt;
 &lt;p&gt;&lt;strong&gt;服务器端渲染与客户端渲染&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;注意，这里我们将网站分为前端和后端，事实上与我们在《程序设计训练》课程中对于使用 Django 来搭建网站的方式不同。Django 的页面渲染是&lt;strong&gt;服务器端渲染&lt;/strong&gt;（Server-side Rendering），也就是说，在收到用户发来的请求后，服务器端按照设计的逻辑读取相应的页面模板，在完成页面渲染（也就是在页面模板的对应处填充对应字段）后，将渲染后的 HTML 页面直接发给用户。&lt;/p&gt;
&lt;p&gt;而这里我们将网站分为“前端”和“后端”，这种设计模式和上述服务器端渲染有本质的区别，我们一般称为&lt;strong&gt;客户端渲染&lt;/strong&gt;（Client-side Rendering）。其运作模式是，网站提供服务器直接将未渲染的 HTML 模板（我们称为“前端代码”）发送给用户，而这模板中包含了类似于 &lt;code&gt;fetch&lt;/code&gt; 的函数，可以在浏览器将其渲染时向我们的“后端”发送请求。“后端”在收到请求后，一般以 Json 格式返回所请求的数据，前端再通过 Javascript 脚本将收到的数据渲染在页面上。&lt;/p&gt;
&lt;p&gt;在《软件工程》课程中我们推荐使用后者这种设计模式，即进行前后端分离。虽然我们也可以继续利用 Django 来作为后端，但是我们这里给大家提供一种业界也很常用的选项 —— Express。其优点在于，相比于 Django 而言，其编写起来更加方便，也更加快捷。&lt;s&gt;而且，后端更加靠近 &lt;code&gt;npm&lt;/code&gt; 这个轮子工厂，对于我们进行大调库也更加的方便。当然，因为 Javascript 令人**的设计，也会收获更加酸爽的 Debug 体验。&lt;/s&gt;
本文我们侧重介绍如何配置一个 Express 项目，并完成一个最基本的与后端数据库通信的增删查改功能.&lt;/p&gt;
 &lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Go</title><link>https://www.clearsec.org/wikis/skills/backend/go/go/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.clearsec.org/wikis/skills/backend/go/go/</guid><description>&lt;h1 id="go"&gt;Go&lt;/h1&gt;
&lt;p&gt;Go 语言是一门由 Google 开发的编译型语言。其语法与 C 较为接近，OOP 水平介于 C 和 C++ 之间，特点是能比较轻易地进行并行编程。Go 被广泛地用于&lt;strong&gt;后端开发&lt;/strong&gt;中，相比 Python、JavaScript 等解释型语言往往拥有更高的运行效率。&lt;/p&gt;
&lt;p&gt;本文我们侧重介绍如何用 Go 搭建一个简易的 Web 服务器，并且完成与后端数据库通信的增删查改功能，对并发安全的内容亦会稍有介绍。&lt;/p&gt;
&lt;p&gt;Credit: 基于 @pyz 的 2022 暑培讲稿，少量修改而成。&lt;/p&gt;</description></item><item><title>Django</title><link>https://www.clearsec.org/wikis/skills/backend/django/django/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.clearsec.org/wikis/skills/backend/django/django/</guid><description>&lt;h1 id="django"&gt;Django&lt;/h1&gt;
&lt;h2 id="前置知识"&gt;前置知识&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;学习Django需要对python有一定的了解。&lt;/li&gt;
&lt;li&gt;需要对Web前后端分离开发基础（包括HTML等）有一定的了解&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="简介"&gt;简介&lt;/h2&gt;
&lt;p&gt;Django是Python语言中当下较热门的Web框架之一，其功能强大，组件繁多，便于个人使用者或小团队在短时间内搭建一个Web应用，是一个适合初学者入门前后端分离开发范式的开发框架，此外，其中的模版功能还提供了前后端不分离的开发框架。本文将从五个部分（文件树结构，路由，模型，视图，单元测试）来介绍Django，阅读后你将掌握独立开发简单web应用的能力。&lt;/p&gt;
&lt;h2 id="文件树结构"&gt;文件树结构&lt;/h2&gt;
&lt;p&gt;在安装了 Django 库之后，我们可以使用 &lt;code&gt;django-admin startproject &amp;lt;项目名&amp;gt;&lt;/code&gt; 来创建一个新项目。在新建&lt;strong&gt;项目&lt;/strong&gt;后，我们进入项目文件夹，可以看到如下的文件树：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;.
├── manage.py # 使用命令行操作后端的主入口
└── &amp;lt;Project Name&amp;gt;
 ├── __init__.py 
 ├── settings.py # 后端启动时应用的设置
 ├── urls.py # 主路由入口
 ├── asgi.py # 以 asgi 方式进行部署的配置文件
 └── wsgi.py # 以 wsgi 方式进行部署的配置文件
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;项目部署的部分是小作业部署阶段（CI/CD 部分）的主要内容，这里我们不详细展开。&lt;/p&gt;
&lt;p&gt;然后我们可以使用 &lt;code&gt;python3 manage.py startapp &amp;lt;应用名&amp;gt; &lt;/code&gt; 来新建一个&lt;strong&gt;应用&lt;/strong&gt;。一个 Django 项目中可以同时存在多个应用，一个应用是具有完成某个独立功能作用的模块，这之后你应该看到：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;.
├── app1 # 你创建的应用
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations # 应用对数据库表及表属性的修改历史
│   │   └── __init__.py
│   ├── models.py # 应用的“模型”定义
│   ├── tests.py # 应用的“单元测试”定义
│   └── views.py # 应用的“视图”定义
├── manage.py
└── &amp;lt;Project Name&amp;gt;
 ├── __init__.py
 ├── asgi.py
 ├── settings.py
 ├── urls.py
 └── wsgi.py
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这时，你一般需要在 &lt;code&gt;&amp;lt;project&amp;gt;/settings.py&lt;/code&gt; 中的 &lt;code&gt;INSTALLED_APPS&lt;/code&gt; 字段中注册该应用。接下来，你应该能够理解下述目录结构：&lt;/p&gt;</description></item><item><title>爬虫</title><link>https://www.clearsec.org/wikis/skills/backend/crawler/crawler/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.clearsec.org/wikis/skills/backend/crawler/crawler/</guid><description>&lt;h1 id="爬虫"&gt;爬虫&lt;/h1&gt;
&lt;details&gt;
&lt;summary&gt;前置知识&lt;/summary&gt;
&lt;p&gt;我们期待您已经了解并掌握了 Python/JavaScript 的基础语法以及 Web 相关知识，如果您对此有任何疑问，可以参考：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.clearsec.org/wikis/skills/wikis/skills/languages/python/"&gt;科协技能引导文档 Python 部分&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.clearsec.org/wikis/skills/wikis/skills/languages/javascript/"&gt;科协技能引导文档 JavaScript 部分&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.clearsec.org/wikis/skills/wikis/skills/basic/web/"&gt;科协技能引导文档 Web 部分&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;此外，我们还提供了一些 HTTP 相关知识以供参考：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.ruanyifeng.com/blog/2016/08/http.html"&gt;HTTP 协议的历史演变和设计思路&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.w3schools.com/tags/ref_httpmethods.asp"&gt;HTTP 有哪些方法可供我们调用？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status"&gt;HTTP 各种响应状态码的含义&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies"&gt;HTTP 的 Cookie 是什么？他有怎样的结构？&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果您在阅读本文档时遇到了任何困难或疑问，欢迎在下方评论区提问讨论。当然，您也可以查询相关官方文档或者选择尝试向 ChatGPT 提问。&lt;/p&gt;
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;Python 相关库&lt;/summary&gt;
&lt;p&gt;我们建议您使用 3.10 版本的 Python，您可以通过 pip 包管理工具来安装本文档所需库。如果您此前没有接触过 pip，您可以通过阅读 &lt;a href="https://www.clearsec.org/wikis/skills/wikis/skills/languages/python/pip/"&gt;Python 包管理&lt;/a&gt; 这篇文章来进行学习。以下是本文档所需的库：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;beautifulsoup4
requests
lxml
tqdm
notebook
jupyter
webdriver-manager
selenium
scrapy
&lt;/code&gt;&lt;/pre&gt;&lt;/details&gt;
&gt; [!WARNING]
&gt; **读前须知与叠甲**
&gt;
&gt;
&gt; 1. 我们建议您先进行配置好环境再进行库使用和实战练习等模块的阅读。一个基础的环境配置方案可以参考 [此仓库](https://github.com/UbeCc/sast-2024-crawler)。
&gt; 2. 本文中实战样例的编程语言为 Python，如想获取 JavaScript 的爬虫 demo，同样可参考上述仓库。
&gt; 3. 由于本文档所涉及到的所有库以及所有网页目前仍在不断更新迭代，它们的各项规范以及组织结构可能因时而异，因此**本文档**中的**所有**示例文件、代码和图片仅对笔者机器在当前时间节点（2025年2月）的结果负责。我们相信，根据本文档的教学，在发现本地运行结果与本文档不同时，您有能力辨别正误并对本文档中的示例进行更正。我们也格外欢迎您在评论区及时反馈由于上述更新所带来的问题。
## 环境配置
&lt;p&gt;本文档中主要使用了以下 Python 第三方库：&lt;/p&gt;</description></item></channel></rss>