# information **Repository Path**: ivhy/information ## Basic Information - **Project Name**: information - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-12-03 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 项目分析 新经资讯网 一款新闻展示的Web项目,主要为用户提供最新的金融资讯、数据 以抓取其他网站数据和用户发布作为新闻的主要来源 基于 Flask 框架,以 前后端不分离 的形式实现具体业务逻辑 技术实现 基于 Python 3.0 + Flask 框架实现 数据存储使用 Redis + MySQL 实现 第三方扩展: 七牛云:文件存储平台 云通信:短信验证码平台 布署:基于ubuntu 16.04系统,使用 Gunicorn + Nginx 进行布署 功能模块 新闻模块 首页新闻列表 新闻详情 用户模块 登录注册/个人信息修改 新闻收藏/发布 后台管理 具体需求 首页 根据分类进行新闻列表展示 上拉加载更多数据 点击新窗口跳转到新闻详情页 顶部显示用户登录信息,未登录显示登录/注册按钮 右侧显示新闻点击排行 注册 用户账号为手机号 图片验证码正确后才能发送短信验证码 短信验证码每60秒发送一次 条件出错时有相应的错误提示 登录 用手机号与密码登录 错误时有相应的提示 新闻详情 新闻内容 html 数据展示 用户点击收藏可以收藏当前新闻 根据当前登录用户显示收藏状态 用户可以评论该新闻 其他用户可以回复某一条评论 右侧显示新闻点击排行 如果当前新闻由具体作者发布,右侧显示作者信息,并且可以关注作者 个人中心 显示个人头像、昵称(未设置时显示为用户手机号) 提供我的关注、我的粉丝入口 提供修改基本资料入口 提供头像设置入口 提供密码修改入口 提供我的收藏入口 提供新闻发布入口 提供我发布的新闻的入口 个人信息修改 可以修改用户名 可以修改个人头像 登陆手机号不能修改 上传新头像后页面立即显示新头像 我的关注 以分页的形式展示数据 每页展示4个我关注的用户 可以在当前页面进行取消关注 点击关注用户的昵称跳转到用户信息页面 我的收藏 以分页的形式展示数据 按收藏时间倒序排序 发布新闻 可以发布新闻 可以将新闻页的图片上传到七牛云 发布完新闻跳转到我的新闻列表页面 我发布的新闻 按照发布的时候先后顺序排序,最近新闻排在前面 显示当前我发布新闻的新闻状态 点击审核通过的新闻直接跳转到新闻详情页 审核中的无法点击 未审核通过的新闻可以重新发布 点击审核失败的新闻跳转到新闻发布页面,并填充具体新闻内容 查看其他人用户页面 显示他人的头像、昵称、粉丝数 可以点击关注和取消关注按钮进行关注操作 展示他发布的新闻 点击新闻在新窗口中打开展示新闻详情 退出 提供退出功能 后台-登录 提供后台登录页面 如果当前用户已登录,进入到登录页面之后直接跳转到后台主页 后台-用户统计 登录到后台界面之后展示用户统计界面 显示用户总人数 展示当前月用户新增人数 展示当前日新增数 后台-用户列表 按注册时间顺序排序用户列表 显示用户注册时间 显示用户上次登录时间 后台-新闻审核 展示待审核新闻内容 点击进入新闻审核界面 可以对新闻进行审核 如果审核不通过,需要有拒绝原因 新闻版式编辑 进入默认展示所有新闻数据 可以根据新闻标题搜索新闻 新闻分类管理 展示所有分类列表 可以添加/修改分类 项目目录 . ├── add_test_users.py ├── config.py ├── info │   ├── constants.py │   ├── __init__.py │   ├── libs │   │   ├── __init__.py │   │   ├── __pycache__ │   │   │   └── __init__.cpython-35.pyc │   │   └── yuntongxun │   │   ├── CCPRestSDK.py │   │   ├── __init__.py │   │   ├── __pycache__ │   │   │   ├── CCPRestSDK.cpython-35.pyc │   │   │   ├── __init__.cpython-35.pyc │   │   │   ├── sms.cpython-35.pyc │   │   │   └── xmltojson.cpython-35.pyc │   │   ├── sms.py │   │   ├── xmltojson.py │   │   └── 接口说明.txt │   ├── models.py │   ├── modules │   │   ├── admin │   │   │   ├── __init__.py │   │   │   ├── __pycache__ │   │   │   │   ├── __init__.cpython-35.pyc │   │   │   │   └── views.cpython-35.pyc │   │   │   └── views.py │   │   ├── index │   │   │   ├── __init__.py │   │   │   ├── __pycache__ │   │   │   │   ├── __init__.cpython-35.pyc │   │   │   │   └── views.cpython-35.pyc │   │   │   └── views.py │   │   ├── __init__.py │   │   ├── news │   │   │   ├── __init__.py │   │   │   ├── __pycache__ │   │   │   │   ├── __init__.cpython-35.pyc │   │   │   │   └── views.cpython-35.pyc │   │   │   └── views.py │   │   ├── passport │   │   │   ├── __init__.py │   │   │   ├── __pycache__ │   │   │   │   ├── __init__.cpython-35.pyc │   │   │   │   └── views.cpython-35.pyc │   │   │   └── views.py │   │   ├── profile │   │   │   ├── __init__.py │   │   │   ├── __pycache__ │   │   │   │   ├── __init__.cpython-35.pyc │   │   │   │   └── views.cpython-35.pyc │   │   │   └── views.py │   │   └── __pycache__ │   │   └── __init__.cpython-35.pyc │   ├── __pycache__ │   │   ├── constants.cpython-35.pyc │   │   ├── __init__.cpython-35.pyc │   │   └── models.cpython-35.pyc │   ├── static │   │   ├── admin │   │   │   ├── css │   │   │   │   ├── jquery.pagination.css │   │   │   │   ├── main.css │   │   │   │   └── reset.css │   │   │   ├── html │   │   │   ├── images │   │   │   │   ├── icons.png │   │   │   │   ├── login-bg.jpg │   │   │   │   ├── logo.png │   │   │   │   └── person.png │   │   │   ├── js │   │   │   │   ├── echarts.min.js │   │   │   │   ├── jquery-1.12.4.min.js │   │   │   │   ├── jquery.form.min.js │   │   │   │   ├── jquery.pagination.min.js │   │   │   │   ├── news_edit_detail.js │   │   │   │   ├── news_review_detail.js │   │   │   │   ├── news_type.js │   │   │   │   └── tinymce_setup.js │   │   │   └── tinymce │   │   │   ├── changelog.txt │   │   │   ├── js │   │   │   │   └── tinymce │   │   │   │   ├── jquery.tinymce.min.js │   │   │   │   ├── langs │   │   │   │   │   ├── readme.md │   │   │   │   │   └── zh_CN.js │   │   │   │   ├── license.txt │   │   │   │   ├── plugins │   │   │   │   │   ├── advlist │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── anchor │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── autolink │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── autoresize │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── autosave │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── bbcode │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── charmap │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── code │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── codesample │   │   │   │   │   │   ├── css │   │   │   │   │   │   │   └── prism.css │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── colorpicker │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── contextmenu │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── directionality │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── emoticons │   │   │   │   │   │   ├── img │   │   │   │   │   │   │   ├── smiley-cool.gif │   │   │   │   │   │   │   ├── smiley-cry.gif │   │   │   │   │   │   │   ├── smiley-embarassed.gif │   │   │   │   │   │   │   ├── smiley-foot-in-mouth.gif │   │   │   │   │   │   │   ├── smiley-frown.gif │   │   │   │   │   │   │   ├── smiley-innocent.gif │   │   │   │   │   │   │   ├── smiley-kiss.gif │   │   │   │   │   │   │   ├── smiley-laughing.gif │   │   │   │   │   │   │   ├── smiley-money-mouth.gif │   │   │   │   │   │   │   ├── smiley-sealed.gif │   │   │   │   │   │   │   ├── smiley-smile.gif │   │   │   │   │   │   │   ├── smiley-surprised.gif │   │   │   │   │   │   │   ├── smiley-tongue-out.gif │   │   │   │   │   │   │   ├── smiley-undecided.gif │   │   │   │   │   │   │   ├── smiley-wink.gif │   │   │   │   │   │   │   └── smiley-yell.gif │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── fullpage │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── fullscreen │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── help │   │   │   │   │   │   ├── img │   │   │   │   │   │   │   └── logo.png │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── hr │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── image │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── imagetools │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── imageupload │   │   │   │   │   │   ├── css │   │   │   │   │   │   │   └── style.css │   │   │   │   │   │   ├── img │   │   │   │   │   │   │   └── icon.png │   │   │   │   │   │   ├── jquery.iframe-post-form.js │   │   │   │   │   │   ├── plugin.min.js │   │   │   │   │   │   └── uncompressed │   │   │   │   │   │   ├── css │   │   │   │   │   │   │   └── style.css │   │   │   │   │   │   └── plugin.js │   │   │   │   │   ├── importcss │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── insertdatetime │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── legacyoutput │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── link │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── lists │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── media │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── nonbreaking │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── noneditable │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── pagebreak │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── paste │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── preview │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── print │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── save │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── searchreplace │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── spellchecker │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── tabfocus │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── table │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── template │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── textcolor │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── textpattern │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── toc │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── visualblocks │   │   │   │   │   │   ├── css │   │   │   │   │   │   │   └── visualblocks.css │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   ├── visualchars │   │   │   │   │   │   └── plugin.min.js │   │   │   │   │   └── wordcount │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── skins │   │   │   │   │   └── lightgray │   │   │   │   │   ├── content.inline.min.css │   │   │   │   │   ├── content.min.css │   │   │   │   │   ├── content.mobile.min.css │   │   │   │   │   ├── fonts │   │   │   │   │   │   ├── tinymce.eot │   │   │   │   │   │   ├── tinymce-mobile.woff │   │   │   │   │   │   ├── tinymce-small.eot │   │   │   │   │   │   ├── tinymce-small.svg │   │   │   │   │   │   ├── tinymce-small.ttf │   │   │   │   │   │   ├── tinymce-small.woff │   │   │   │   │   │   ├── tinymce.svg │   │   │   │   │   │   ├── tinymce.ttf │   │   │   │   │   │   └── tinymce.woff │   │   │   │   │   ├── img │   │   │   │   │   │   ├── anchor.gif │   │   │   │   │   │   ├── loader.gif │   │   │   │   │   │   ├── object.gif │   │   │   │   │   │   └── trans.gif │   │   │   │   │   ├── skin.min.css │   │   │   │   │   └── skin.mobile.min.css │   │   │   │   ├── themes │   │   │   │   │   ├── inlite │   │   │   │   │   │   └── theme.min.js │   │   │   │   │   ├── mobile │   │   │   │   │   │   └── theme.min.js │   │   │   │   │   └── modern │   │   │   │   │   └── theme.min.js │   │   │   │   └── tinymce.min.js │   │   │   └── LICENSE.TXT │   │   └── news │   │   ├── css │   │   │   ├── jquery.pagination.css │   │   │   ├── main.css │   │   │   └── reset.css │   │   ├── favicon.ico │   │   ├── html │   │   ├── images │   │   │   ├── cat.jpg │   │   │   ├── clock.png │   │   │   ├── collect_icons.png │   │   │   ├── comment_icon.png │   │   │   ├── focus_icons.png │   │   │   ├── hit_icon.png │   │   │   ├── logo.png │   │   │   ├── news_pic.jpg │   │   │   ├── not_found.png │   │   │   ├── person01.png │   │   │   ├── person02.png │   │   │   ├── person03.png │   │   │   ├── person.png │   │   │   ├── pic_code.png │   │   │   ├── reply_icon.png │   │   │   ├── shutoff.png │   │   │   ├── tip_bg.png │   │   │   ├── user_pic.png │   │   │   ├── worm.jpg │   │   │   └── zan_icon.png │   │   ├── js │   │   │   ├── detail.js │   │   │   ├── index.js │   │   │   ├── jquery-1.12.4.min.js │   │   │   ├── jquery.form.min.js │   │   │   ├── jquery.pagination.min.js │   │   │   ├── main.js │   │   │   ├── other.js │   │   │   ├── tinymce_setup.js │   │   │   ├── user_base_info.js │   │   │   ├── user_follow.js │   │   │   ├── user_news_release.js │   │   │   ├── user_pass_info.js │   │   │   └── user_pic_info.js │   │   └── tinymce │   │   ├── changelog.txt │   │   ├── js │   │   │   └── tinymce │   │   │   ├── jquery.tinymce.min.js │   │   │   ├── langs │   │   │   │   ├── readme.md │   │   │   │   └── zh_CN.js │   │   │   ├── license.txt │   │   │   ├── plugins │   │   │   │   ├── advlist │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── anchor │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── autolink │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── autoresize │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── autosave │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── bbcode │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── charmap │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── code │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── codesample │   │   │   │   │   ├── css │   │   │   │   │   │   └── prism.css │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── colorpicker │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── contextmenu │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── directionality │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── emoticons │   │   │   │   │   ├── img │   │   │   │   │   │   ├── smiley-cool.gif │   │   │   │   │   │   ├── smiley-cry.gif │   │   │   │   │   │   ├── smiley-embarassed.gif │   │   │   │   │   │   ├── smiley-foot-in-mouth.gif │   │   │   │   │   │   ├── smiley-frown.gif │   │   │   │   │   │   ├── smiley-innocent.gif │   │   │   │   │   │   ├── smiley-kiss.gif │   │   │   │   │   │   ├── smiley-laughing.gif │   │   │   │   │   │   ├── smiley-money-mouth.gif │   │   │   │   │   │   ├── smiley-sealed.gif │   │   │   │   │   │   ├── smiley-smile.gif │   │   │   │   │   │   ├── smiley-surprised.gif │   │   │   │   │   │   ├── smiley-tongue-out.gif │   │   │   │   │   │   ├── smiley-undecided.gif │   │   │   │   │   │   ├── smiley-wink.gif │   │   │   │   │   │   └── smiley-yell.gif │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── fullpage │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── fullscreen │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── help │   │   │   │   │   ├── img │   │   │   │   │   │   └── logo.png │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── hr │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── image │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── imagetools │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── imageupload │   │   │   │   │   ├── css │   │   │   │   │   │   └── style.css │   │   │   │   │   ├── img │   │   │   │   │   │   └── icon.png │   │   │   │   │   ├── jquery.iframe-post-form.js │   │   │   │   │   ├── plugin.min.js │   │   │   │   │   └── uncompressed │   │   │   │   │   ├── css │   │   │   │   │   │   └── style.css │   │   │   │   │   └── plugin.js │   │   │   │   ├── importcss │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── insertdatetime │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── legacyoutput │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── link │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── lists │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── media │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── nonbreaking │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── noneditable │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── pagebreak │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── paste │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── preview │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── print │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── save │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── searchreplace │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── spellchecker │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── tabfocus │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── table │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── template │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── textcolor │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── textpattern │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── toc │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── visualblocks │   │   │   │   │   ├── css │   │   │   │   │   │   └── visualblocks.css │   │   │   │   │   └── plugin.min.js │   │   │   │   ├── visualchars │   │   │   │   │   └── plugin.min.js │   │   │   │   └── wordcount │   │   │   │   └── plugin.min.js │   │   │   ├── skins │   │   │   │   └── lightgray │   │   │   │   ├── content.inline.min.css │   │   │   │   ├── content.min.css │   │   │   │   ├── content.mobile.min.css │   │   │   │   ├── fonts │   │   │   │   │   ├── tinymce.eot │   │   │   │   │   ├── tinymce-mobile.woff │   │   │   │   │   ├── tinymce-small.eot │   │   │   │   │   ├── tinymce-small.svg │   │   │   │   │   ├── tinymce-small.ttf │   │   │   │   │   ├── tinymce-small.woff │   │   │   │   │   ├── tinymce.svg │   │   │   │   │   ├── tinymce.ttf │   │   │   │   │   └── tinymce.woff │   │   │   │   ├── img │   │   │   │   │   ├── anchor.gif │   │   │   │   │   ├── loader.gif │   │   │   │   │   ├── object.gif │   │   │   │   │   └── trans.gif │   │   │   │   ├── skin.min.css │   │   │   │   └── skin.mobile.min.css │   │   │   ├── themes │   │   │   │   ├── inlite │   │   │   │   │   └── theme.min.js │   │   │   │   ├── mobile │   │   │   │   │   └── theme.min.js │   │   │   │   └── modern │   │   │   │   └── theme.min.js │   │   │   └── tinymce.min.js │   │   └── LICENSE.TXT │   ├── templates │   │   ├── admin │   │   │   ├── index.html │   │   │   ├── login.html │   │   │   ├── news_edit_detail.html │   │   │   ├── news_edit.html │   │   │   ├── news_review_detail.html │   │   │   ├── news_review.html │   │   │   ├── news_type.html │   │   │   ├── user_count.html │   │   │   └── user_list.html │   │   └── news │   │   ├── 404.html │   │   ├── base.html │   │   ├── detail.html │   │   ├── index.html │   │   ├── other.html │   │   ├── user_base_info.html │   │   ├── user_collection.html │   │   ├── user_follow.html │   │   ├── user.html │   │   ├── user_news_list.html │   │   ├── user_news_release.html │   │   ├── user_pass_info.html │   │   └── user_pic_info.html │   └── utils │   ├── captcha │   │   ├── captcha.py │   │   ├── fonts │   │   │   ├── actionj.ttf │   │   │   ├── Arial.ttf │   │   │   └── Georgia.ttf │   │   ├── __init__.py │   │   └── __pycache__ │   │   ├── captcha.cpython-35.pyc │   │   └── __init__.cpython-35.pyc │   ├── common.py │   ├── image_storage.py │   ├── __init__.py │   ├── __pycache__ │   │   ├── common.cpython-35.pyc │   │   ├── image_storage.cpython-35.pyc │   │   ├── __init__.cpython-35.pyc │   │   └── response_code.cpython-35.pyc │   └── response_code.py ├── logs │   └── log ├── manage.py ├── migrations │   ├── alembic.ini │   ├── env.py │   ├── __pycache__ │   │   └── env.cpython-35.pyc │   ├── README │   ├── script.py.mako │   └── versions │   ├── 2fc668af6466_initial.py │   └── __pycache__ │   └── 2fc668af6466_initial.cpython-35.pyc ├── __pycache__ │   └── config.cpython-35.pyc ├── README.md ├── requirements.txt └── test_data ├── information_info_category.sql └── information_info_news.sql