<commit_before>.. _design:


***********
Design 系统设计
***********



.. _webapp_design

Web框架
=======================

**消息管理功能**
----------

.. _login

Login 登录
--------

* 功能说明:

   支持不同等级用户的登录
      
   数据库默认有root:root的初始账户,登录后请修改密码,据此增添其他账户
   
* 使用方法:
 
   输入账户密码登录

Login 登出
--------

* 功能说明:

   登出系统,自动跳转回登录界面
      
   删除cookie等信息
   
* 使用方法:
 
   导航栏点击LOGOUT


New post 发布新消息
--------------
* 功能说明:

   管理员登录后默认进入发布新消息页面
      
   目前只能群发,还不能针对特定用户发布消息
      
   可以编辑消息标题,摘要,内容(标题,摘要有长度限制)
      
   (支持基本的html可视化编辑，如设定字体、修改文本格式（缩进、列表、超链接等）、插入图片等)
   
* 使用方法:
 
   在导航栏点击NEW POST,输入新消息的信息后点击发布

Postlist 展示消息列表
---------------

* 功能说明:

   管理员登录后可以选择进入消息列表,展现所有消息的标题,摘要,修改时间

   每个消息都附有展开,删除,修改,改变消息拥有者选择

   消息按照修改时间降序排序,分页显示

* 使用方法:

   在导航栏点击POST MANAGE,输入新消息的信息后点击发布
<commit_msg>Update design.rst<commit_after>.. _design:


***********
Design 系统设计
***********



.. _webapp_design

Web框架
=======================

.. _url

URL (webapp.web.Application)
------------------------

* 模仿web框架,先定义好匹配的字典,满足正则匹配则调用相应的方法

* 此处的调用是以类为handler,再调用类里面对应的get或者post方法


Request (webapp.web.Request)
--------------------------------

* 基于CGI协议

* 关键是从CGI从提取出需要的URL,METHOD等信息,然后构造相关的response


Response (webapp.web.BaseHandler)

* 所有的handlers继承这个基类,里面有设置cookie, http head, template等基本方法


Template (webapp.web.BaseHandler)
----------------------------------------

* 设计了一个简单的template方式,预先将html存在templates文件中,需要时候,读取相关文件,替换需要的部分,重新输出

* 输出时,相当于将拼接好的字符串直接print


Cookie (webapp.utils)
------------------------

* 仿照Tornado secret cookie原理

* 利用时间戳和用户自定义secret串,加密cookie作为用户的验证标准




.. _database_design

数据库设计
=======================

.. _database

数据库 (model.dbapi)
------------------------

* 数据库的设计请见dbinit.sql这个文件，主要为用户表

* 创建数据库yagra,一个新的用户yagra并为yagra授予必要的权限

* 用户密码使用md5存储


功能处理
=======================


图片上传 (webapp.handlers.UploadHandler)
------------------------

* 图片直接存储在本地的images文件中(需要赋予第三方images可读可写的权限)

* 上传时候,检查图片格式(白名单过滤),同时限制大小,避免存储过大的文件



{'fraction_non_alphanumeric': 0.25421994884910487, 'fraction_numerical': 0.0005115089514066496, 'mean_word_length': 2.5370705244122966, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3548656', 'n_tokens_mistral': 1138, 'n_tokens_neox': 1274, 'n_words': 87}