python简易博客(九)–汇总

  • by

正文:

一.

1.app.py  (启动程序)

def init_jinja2(app, **kw): #注册jinja2模板
def logger_factory(app, handler): #url日志
def auth_factory(app, handler):#利用middle在处理URL之前,把cookie解析出来,并将登录用户绑定到request对象上,这样,后续的URL处理函数就可以直接拿到登录用户
def data_factory(app, handler):
def response_factory(app, handler): #将返回的数据进行处理,符合aiohttp框架的基础知识
def datetime_filter(t):#通过jinja2的filter(过滤器),把一个浮点数转换成日期字符串。我们来编写一个datetime的filter,filter需要在初始化jinja2时设置
def init(loop) #整个程序开始

2.handler.py(各种url处理函数)

def text2html(text)
def user2cookie(user, max_age): #计算加密的cookie
def get_page_index(page_str)#取得page(num)
def check_admin(request):#检查是否是管理员
后端API包括:
    获取日志:GET /api/blogs
    创建日志:POST /api/blogs
    修改日志:POST /api/blogs/:blog_id
    删除日志:POST /api/blogs/:blog_id/delete
    获取评论:GET /api/comments
    创建评论:POST /api/blogs/:blog_id/comments
    删除评论:POST /api/comments/:comment_id/delete
    创建新用户:POST /api/users
    获取用户:GET /api/users
管理页面包括:
    评论列表页:GET /manage/comments
    日志列表页:GET /manage/blogs
    创建日志页:GET /manage/blogs/create
    修改日志页:GET /manage/blogs/
    用户列表页:GET /manage/users
用户浏览页面包括:
    注册页:GET /register
    登录页:GET /signin
    注销页:GET /signout
    首页:GET /
    日志详情页:GET /blog/:blog_id

3.coroweb.py(web框架)

装饰器,得到url信息(有待理解)
def get(path)
def post(path)
分解url信息
def get_required_kw_args(fn)
def get_named_kw_args(fn)
def has_named_kw_args(fn)
def has_var_kw_arg(fn)
def has_request_arg(fn)
处理url信息
class RequestHandler(object)
添加静态文件
def add_static(app)
注册为url处理函数
def add_route(app, fn)
自动扫描,批处理url处理函数
def add_routes(app, module_name)

4.orm.py

def log(sql, args=())
def create_pool(loop, **kw)
def select(sql, args, size=None)
def execute(sql, args, autocommit=True)
def create_args_string(num)
class Field(object)
class StringField(Field)
class BooleanField(Field)
class IntegerField(Field)
class FloatField(Field)
class TextField(Field)
class ModelMetaclass(type)
class Model(dict, metaclass=ModelMetaclass):
   def __getattr__(self, key)
   def __setattr__(self, key, value)
   def getValue(self, key)
   def getValueOrDefault(self, key)
   def findAll(cls, where=None, args=None, **kw)
   def findNumber(cls, selectField, where=None, args=None)
   def find(cls, pk)
   def save(self)
   def update(self)
   def remove(self)

5.apis.py  (错误处理)

class Page(object)(页数)
class APIError(Exception)  获得exception父类
class APIValueError(APIError)
class APIResourceNotFoundError(APIError)
class APIPermissionError(APIError)

6.models.py  (模型)

def next_id()
class User(Model)
class Blog(Model)
class Comment(Model)

7.config.py  (配置文件处理)

class Dict(dict)
def merge(defaults, override)
def toDict(d

8.pymonitor.py  (程序监控)

若有代码修改,重启。提升开发效率

def log(s)
class MyFileSystemEventHander(FileSystemEventHandler)
def kill_process()
def start_process()
def restart_process()
def start_watch(path, callback)

二.static

三.templates

_base_.html
blog.html
blogs.html
manage_blog_edit.html
manage_blogs.html
manage_comments.html
manage_users.html
register.html
signin.html

四.fabfile.py

自动化部署

五.nignx和supervisor配置

补充:怎样成为博客管理员

分析:app.py文件里auth_factory函数

        if request.path.startswith('/manage/') and (request.__user__ is None or not request.__user__.admin):  #判断是否为管理员,不是的话,进入signin登陆界面(startwith函数,匹配)
            return web.HTTPFound('/signin') # 这里做了判断,应该是middle。如果不是管理员是不能进入manage开头的页面,直接跳到登陆界面

users表,有name,passwd,admin等列,当admin是1时,用户是管理员,是0是,用户是普通成员。我的做法是先注册用户,再进入mysql数据库,更改admin的值为1(有点提权的味道)

2018.5.23

标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注