├── LICENSE ├── README.md ├── a.png ├── b.png ├── main ├── .env ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-36.pyc │ ├── __init__.cpython-37.pyc │ ├── cache.cpython-36.pyc │ ├── cache.cpython-37.pyc │ ├── config.cpython-36.pyc │ ├── config.cpython-37.pyc │ ├── cqueue.cpython-37.pyc │ ├── forms.cpython-36.pyc │ ├── forms.cpython-37.pyc │ ├── mail.cpython-36.pyc │ ├── mail.cpython-37.pyc │ ├── models.cpython-36.pyc │ ├── models.cpython-37.pyc │ ├── shell_manage.cpython-36.pyc │ ├── shell_manage.cpython-37.pyc │ ├── start.cpython-36.pyc │ ├── start.cpython-37.pyc │ ├── tasks.cpython-36.pyc │ ├── tasks.cpython-37.pyc │ ├── tool.cpython-36.pyc │ ├── tool.cpython-37.pyc │ ├── views.cpython-36.pyc │ └── views.cpython-37.pyc ├── cache.py ├── config.py ├── data │ └── blog_collect.db ├── forms.py ├── mail.py ├── migrations │ ├── README │ ├── __pycache__ │ │ └── env.cpython-37.pyc │ ├── alembic.ini │ ├── env.py │ ├── script.py.mako │ └── versions │ │ ├── 0982f7d5be45_.py │ │ ├── 24d76067f7cf_.py │ │ ├── 491417b3537e_.py │ │ ├── 87b301973f6e_.py │ │ ├── 9c1bf19bd97a_.py │ │ ├── __pycache__ │ │ ├── 0982f7d5be45_.cpython-37.pyc │ │ ├── 24d76067f7cf_.cpython-37.pyc │ │ ├── 491417b3537e_.cpython-37.pyc │ │ ├── 87b301973f6e_.cpython-37.pyc │ │ ├── 9c1bf19bd97a_.cpython-37.pyc │ │ ├── b5ff6e74714a_.cpython-37.pyc │ │ ├── c089c44a60fc_.cpython-37.pyc │ │ └── ff38a18013c9_.cpython-37.pyc │ │ ├── b5ff6e74714a_.py │ │ ├── c089c44a60fc_.py │ │ └── ff38a18013c9_.py ├── models.py ├── shell_manage.py ├── start.py ├── static │ ├── css │ │ ├── _pgbackup │ │ │ ├── xenon-core_1591888890.css │ │ │ └── xenon-core_1591890978.css │ │ ├── bootstrap.css │ │ ├── button-demo.css │ │ ├── custom.css │ │ ├── fonts │ │ │ ├── elusive │ │ │ │ ├── css │ │ │ │ │ ├── animation.css │ │ │ │ │ ├── elusive-codes.css │ │ │ │ │ ├── elusive-embedded.css │ │ │ │ │ ├── elusive-ie7-codes.css │ │ │ │ │ ├── elusive-ie7.css │ │ │ │ │ └── elusive.css │ │ │ │ └── font │ │ │ │ │ ├── elusive.eot │ │ │ │ │ ├── elusive.svg │ │ │ │ │ ├── elusive.ttf │ │ │ │ │ └── elusive.woff │ │ │ ├── fontawesome │ │ │ │ ├── css │ │ │ │ │ ├── font-awesome.css │ │ │ │ │ └── font-awesome.min.css │ │ │ │ └── fonts │ │ │ │ │ ├── FontAwesome.otf │ │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ │ └── fontawesome-webfont.woff │ │ │ ├── glyphicons │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ └── glyphicons-halflings-regular.woff │ │ │ ├── linecons │ │ │ │ ├── css │ │ │ │ │ ├── animation.css │ │ │ │ │ ├── linecons-codes.css │ │ │ │ │ ├── linecons-embedded.css │ │ │ │ │ ├── linecons-ie7-codes.css │ │ │ │ │ ├── linecons-ie7.css │ │ │ │ │ └── linecons.css │ │ │ │ └── font │ │ │ │ │ ├── linecons.eot │ │ │ │ │ ├── linecons.svg │ │ │ │ │ ├── linecons.ttf │ │ │ │ │ └── linecons.woff │ │ │ └── meteocons │ │ │ │ ├── css │ │ │ │ ├── animation.css │ │ │ │ ├── meteocons-codes.css │ │ │ │ ├── meteocons-embedded.css │ │ │ │ ├── meteocons-ie7-codes.css │ │ │ │ ├── meteocons-ie7.css │ │ │ │ └── meteocons.css │ │ │ │ └── font │ │ │ │ ├── meteocons.eot │ │ │ │ ├── meteocons.svg │ │ │ │ ├── meteocons.ttf │ │ │ │ └── meteocons.woff │ │ ├── mybackend.css │ │ ├── mystyle.css │ │ ├── nav.css │ │ ├── xenon-components.css │ │ ├── xenon-core.css │ │ ├── xenon-forms.css │ │ ├── xenon-skins.css │ │ └── xenon.css │ ├── images │ │ ├── add.png │ │ ├── blogo-collapsed@2x.png │ │ ├── blogo@2x.png │ │ ├── favicon.png │ │ ├── flags │ │ │ ├── flag-cn.png │ │ │ └── flag-us.png │ │ ├── icon.png │ │ ├── logo-collapsed@2x.png │ │ ├── logo@2x.png │ │ ├── logo_dark@2x.png │ │ ├── logos │ │ │ ├── 365PSD.png │ │ │ ├── 36kr.png │ │ │ ├── 3dsmax.png │ │ │ ├── 500d.png │ │ │ ├── 55mm.png │ │ │ ├── 90sheji.png │ │ │ ├── ADOBEXDCC.png │ │ │ ├── AdobeAfterEffectsCC.png │ │ │ ├── AdobeColorCC.png │ │ │ ├── AffinityDesigner.png │ │ │ ├── AirbnbDesign.png │ │ │ ├── Android9patch.png │ │ │ ├── AndroidNiceties.png │ │ │ ├── AwesomeSketchPlugins.png │ │ │ ├── BWG.png │ │ │ ├── CSSDesignAwards.png │ │ │ ├── CollectUI.png │ │ │ ├── Coolest.png │ │ │ ├── Designmodo.png │ │ │ ├── Dunnnk.png │ │ │ ├── Ecommercefolio.png │ │ │ ├── Ezgif.png │ │ │ ├── FacebookDesign.png │ │ │ ├── FindIcons.png │ │ │ ├── Fondertype.png │ │ │ ├── FontM.png │ │ │ ├── Fribbble.png │ │ │ ├── GoogleDesign.png │ │ │ ├── INDESIGN .png │ │ │ ├── IcoMoonApp.png │ │ │ ├── Iconfinder.png │ │ │ ├── Illustrator.png │ │ │ ├── InstantLogoSearch.png │ │ │ ├── JDC.png │ │ │ ├── Lapa.png │ │ │ ├── Material_Design.png │ │ │ ├── Materialicons.png │ │ │ ├── Medialoot.png │ │ │ ├── MockupZone.png │ │ │ ├── MuseCC.png │ │ │ ├── MyFonts.png │ │ │ ├── NEXT.png │ │ │ ├── OnlineWebFonts.png │ │ │ ├── PhotoshopLady.png │ │ │ ├── PrincipleRepo.png │ │ │ ├── Pttrns.png │ │ │ ├── ReallyGoodUX.png │ │ │ ├── SiteSee.png │ │ │ ├── Sketch.png │ │ │ ├── SketchMeasure.png │ │ │ ├── SplitShire.png │ │ │ ├── StockSnap.png │ │ │ ├── UICloud.png │ │ │ ├── UrbanFonts.png │ │ │ ├── WebInspiration.png │ │ │ ├── abstractfonts.png │ │ │ ├── albumarium.png │ │ │ ├── aliued.png │ │ │ ├── aliuedcn.png │ │ │ ├── aliyun.png │ │ │ ├── anyway.png │ │ │ ├── appinn.png │ │ │ ├── awesome_design_systems.png │ │ │ ├── awwwards.png │ │ │ ├── behance.png │ │ │ ├── blender.png │ │ │ ├── boxesandarrows.png │ │ │ ├── cdc.png │ │ │ ├── chanpin100.png │ │ │ ├── cinema4d.png │ │ │ ├── colorhunt.png │ │ │ ├── coolors.png │ │ │ ├── csspeeper.png │ │ │ ├── ctrip.png │ │ │ ├── dafont.png │ │ │ ├── default.png │ │ │ ├── designguidelines.png │ │ │ ├── designmunk.png │ │ │ ├── digitaling.png │ │ │ ├── doyoudo.png │ │ │ ├── dribbble.png │ │ │ ├── easyicon.png │ │ │ ├── eico.png │ │ │ ├── euxbaidu.png │ │ │ ├── figma.png │ │ │ ├── flaticon.png │ │ │ ├── flatuicolorpicker.png │ │ │ ├── flatuicolors.png │ │ │ ├── flinto.png │ │ │ ├── fontawesomeicon.png │ │ │ ├── fontex.png │ │ │ ├── fonts2u.png │ │ │ ├── fontsquirrel.png │ │ │ ├── forgraphictm.png │ │ │ ├── framer.png │ │ │ ├── freebiesbug.png │ │ │ ├── freebiesupply.png │ │ │ ├── freenaturestock.png │ │ │ ├── freepik.png │ │ │ ├── fwa.png │ │ │ ├── gaoding.png │ │ │ ├── google.png │ │ │ ├── googlefont.png │ │ │ ├── goqr.png │ │ │ ├── grabient.png │ │ │ ├── gradients.png │ │ │ ├── graphberry.png │ │ │ ├── gratisography.png │ │ │ ├── gtn9.png │ │ │ ├── gulusucai.png │ │ │ ├── hdwallpapers.png │ │ │ ├── huaban.png │ │ │ ├── human_interface_guidelines.png │ │ │ ├── iconarchive.png │ │ │ ├── iconfont.png │ │ │ ├── iconmonstr.png │ │ │ ├── iconsfeed.png │ │ │ ├── imcreator.png │ │ │ ├── imooc.png │ │ │ ├── insight.png │ │ │ ├── invisionapp.png │ │ │ ├── ionicons.png │ │ │ ├── iosicongallery.png │ │ │ ├── isorepublic.png │ │ │ ├── isux.png │ │ │ ├── iyunying.png │ │ │ ├── jeshoots.png │ │ │ ├── khroma.png │ │ │ ├── klart.png │ │ │ ├── lanrentuku.png │ │ │ ├── leiphone.png │ │ │ ├── librestock.png │ │ │ ├── lieyunwang.png │ │ │ ├── lifeofpix.png │ │ │ ├── liqi.png │ │ │ ├── littlebigdetails.png │ │ │ ├── losttype.png │ │ │ ├── lstore.png │ │ │ ├── magdeleine.png │ │ │ ├── marvelapp.png │ │ │ ├── medium.png │ │ │ ├── mmtstock.png │ │ │ ├── mockupworld.png │ │ │ ├── mustsee.png │ │ │ ├── mxd.png │ │ │ ├── myphotopack.png │ │ │ ├── navnav.png │ │ │ ├── negativespace.png │ │ │ ├── niaogebiji.png │ │ │ ├── niceui.png │ │ │ ├── nipic.png │ │ │ ├── nngroup.png │ │ │ ├── notaselfie.png │ │ │ ├── officeplus.png │ │ │ ├── pages.png │ │ │ ├── papers.png │ │ │ ├── photoshop.png │ │ │ ├── photoshopetiquette.png │ │ │ ├── pinterest.png │ │ │ ├── pixabay.png │ │ │ ├── pixeden.png │ │ │ ├── pmcaff.png │ │ │ ├── pptmind.png │ │ │ ├── pptplus.png │ │ │ ├── principle.png │ │ │ ├── producthunt.png │ │ │ ├── protopie.png │ │ │ ├── psefan.png │ │ │ ├── publicdomainarchive.png │ │ │ ├── qianku.png │ │ │ ├── qiantu.png │ │ │ ├── reeoo.png │ │ │ ├── sccnn.png │ │ │ ├── screensizes.png │ │ │ ├── shejizhoukan.png │ │ │ ├── sicangziti.png │ │ │ ├── simplelineicons.png │ │ │ ├── siteInspire.png │ │ │ ├── sizzy.png │ │ │ ├── sketchIm.png │ │ │ ├── sketchapp.png │ │ │ ├── sketchappsources.png │ │ │ ├── sketchcasts.png │ │ │ ├── sketchcn.png │ │ │ ├── sketchhunt.png │ │ │ ├── skitterphoto.png │ │ │ ├── smashingmagazine.png │ │ │ ├── sousucai.png │ │ │ ├── ss-kexueshangwang.png │ │ │ ├── sspai.png │ │ │ ├── stokpic.png │ │ │ ├── svgomg.png │ │ │ ├── tgideas.png │ │ │ ├── thedayscolor.png │ │ │ ├── thestocks.png │ │ │ ├── threed.png │ │ │ ├── tinypng.png │ │ │ ├── today.png │ │ │ ├── tretars.png │ │ │ ├── trianglify.png │ │ │ ├── typekit.png │ │ │ ├── uedbaidu.png │ │ │ ├── uedc.png │ │ │ ├── ui8.png │ │ │ ├── uicn.png │ │ │ ├── uigradients.png │ │ │ ├── uigreat.png │ │ │ ├── uikitme.png │ │ │ ├── uisdc.png │ │ │ ├── uiuigreat.png │ │ │ ├── unsplash.png │ │ │ ├── uplabs.png │ │ │ ├── usepanda.png │ │ │ ├── uxcoffee.png │ │ │ ├── uxdesignweekly.png │ │ │ ├── uxren.png │ │ │ ├── vanschneider.png │ │ │ ├── viggoz.png │ │ │ ├── visualhunt.png │ │ │ ├── wallhalla.png │ │ │ ├── wappalyzer.png │ │ │ ├── web_ui_tutorial.png │ │ │ ├── webdesignledger.png │ │ │ ├── webgradients.png │ │ │ ├── worldvectorlogo.png │ │ │ ├── woshipm.png │ │ │ ├── wotu.png │ │ │ ├── xituqu.png │ │ │ ├── xiyou.png │ │ │ ├── yineng.png │ │ │ ├── youtube.png │ │ │ ├── ypppt.png │ │ │ ├── yrucd.png │ │ │ ├── zaodula.png │ │ │ ├── zcool.png │ │ │ ├── zheshu.png │ │ │ ├── ziticangku.png │ │ │ └── ziticq.png │ │ ├── preview.gif │ │ ├── qqgroup_webstack.jpg │ │ ├── qqgroup_webstack2.jpg │ │ ├── t.png │ │ ├── t2.png │ │ ├── test.jpg │ │ ├── user-1.png │ │ ├── user-2.png │ │ ├── user-3.png │ │ ├── user-4.png │ │ ├── user-5.png │ │ ├── webstack_banner_cn.png │ │ ├── webstack_icon_producthunt.png │ │ ├── wechat_viggo.jpg │ │ ├── z.png │ │ └── zm-2-77.png │ ├── js │ │ ├── TweenMax.min.js │ │ ├── bootstrap.min.js │ │ ├── dropzone │ │ │ ├── css │ │ │ │ ├── basic.css │ │ │ │ ├── dropzone.css │ │ │ │ └── stylus │ │ │ │ │ ├── basic.styl │ │ │ │ │ └── dropzone.styl │ │ │ ├── dropzone-amd-module.min.js │ │ │ ├── dropzone.min.js │ │ │ └── images │ │ │ │ ├── spritemap.png │ │ │ │ └── spritemap@2x.png │ │ ├── joinable.js │ │ ├── jquery-1.11.1.min.js │ │ ├── jquery.bootstrap-autohidingnavbar.min.js │ │ ├── jquery.cookie.js │ │ ├── jquery.mousewheel.min.js │ │ ├── jquery.validate.min.js │ │ ├── lazyload.js │ │ ├── lozad.js │ │ ├── mine.js │ │ ├── my_card.js │ │ ├── resizeable.js │ │ ├── temp.js │ │ ├── toastr.min.js │ │ ├── xenon-api.js │ │ ├── xenon-custom.js │ │ ├── xenon-toggles.js │ │ └── xenon-widgets.js │ └── webstack_logos.sketch ├── tasks.py ├── templates │ ├── __sidebar.html │ ├── __smooth.js.html │ ├── __topnav.html │ ├── about.html │ ├── backsys │ │ ├── __nav.html │ │ ├── __post.html │ │ ├── backbase.html │ │ ├── bflash.html │ │ ├── crawl.html │ │ ├── developing.html │ │ ├── login_email.html │ │ ├── login_password.html │ │ └── postlist.html │ ├── backup │ │ ├── upload__backup.html │ │ └── upload__backup2.html │ ├── base.html │ ├── errors │ │ └── 404.html │ ├── index.html │ ├── look.html │ ├── macro │ │ └── form.html │ ├── mail │ │ ├── crawl_complete.html │ │ ├── crawl_complete.txt │ │ ├── login_blog.html │ │ └── login_blog.txt │ ├── modify.html │ ├── nestpage.html │ ├── sub │ │ ├── about_author_card.html │ │ ├── blog_card.html │ │ ├── blog_card_backup.html │ │ ├── index_post_card.html │ │ ├── menu_li.html │ │ ├── post_card.html │ │ └── temp.html │ ├── temp │ │ ├── index_temp_data.html │ │ └── js_backend │ ├── underbase.html │ └── upload.html ├── tool.py ├── tools │ ├── __pycache__ │ │ ├── make_fake_data.cpython-36.pyc │ │ └── make_fake_data.cpython-37.pyc │ ├── crawler │ │ ├── seekbetter.py │ │ ├── seekbetter.txt │ │ └── test.py │ ├── get_post_list.py │ └── make_fake_data.py └── views.py ├── requirements.txt ├── run.py ├── supervisord.conf └── uwsgi.ini /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 shitianfang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # flask-blog-platform 2 | 3 | 项目自带爬虫功能,可以爬取博客文章 4 | 5 | # 使用方法: 6 | 运行run.py文件 7 | 8 | 若需要爬取文章,则需要启动celery 9 | celery -A main.start.celery worker -l info -P eventlet 10 | 或 11 | celery -A main.start.celery worker -l info --pool=solo 12 | 13 | 在Linux后台运行可以使用: 14 | supervisord -c /目录/supervisord.conf 15 | 16 | 17 | #有问题可以加QQ群交流:1126037372 18 | 19 | 感谢Viggo前端 https://github.com/WebStackPage/WebStackPage.github.io 20 | 21 | # 效果 22 | ![](https://github.com/shitianfang/flask-blog-platform/blob/master/a.png) 23 | ![](https://github.com/shitianfang/flask-blog-platform/blob/master/b.png) 24 | -------------------------------------------------------------------------------- /a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/a.png -------------------------------------------------------------------------------- /b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/b.png -------------------------------------------------------------------------------- /main/.env: -------------------------------------------------------------------------------- 1 | FLASK_APP=start.py -------------------------------------------------------------------------------- /main/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__init__.py -------------------------------------------------------------------------------- /main/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /main/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /main/__pycache__/cache.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/cache.cpython-36.pyc -------------------------------------------------------------------------------- /main/__pycache__/cache.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/cache.cpython-37.pyc -------------------------------------------------------------------------------- /main/__pycache__/config.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/config.cpython-36.pyc -------------------------------------------------------------------------------- /main/__pycache__/config.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/config.cpython-37.pyc -------------------------------------------------------------------------------- /main/__pycache__/cqueue.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/cqueue.cpython-37.pyc -------------------------------------------------------------------------------- /main/__pycache__/forms.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/forms.cpython-36.pyc -------------------------------------------------------------------------------- /main/__pycache__/forms.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/forms.cpython-37.pyc -------------------------------------------------------------------------------- /main/__pycache__/mail.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/mail.cpython-36.pyc -------------------------------------------------------------------------------- /main/__pycache__/mail.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/mail.cpython-37.pyc -------------------------------------------------------------------------------- /main/__pycache__/models.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/models.cpython-36.pyc -------------------------------------------------------------------------------- /main/__pycache__/models.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/models.cpython-37.pyc -------------------------------------------------------------------------------- /main/__pycache__/shell_manage.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/shell_manage.cpython-36.pyc -------------------------------------------------------------------------------- /main/__pycache__/shell_manage.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/shell_manage.cpython-37.pyc -------------------------------------------------------------------------------- /main/__pycache__/start.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/start.cpython-36.pyc -------------------------------------------------------------------------------- /main/__pycache__/start.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/start.cpython-37.pyc -------------------------------------------------------------------------------- /main/__pycache__/tasks.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/tasks.cpython-36.pyc -------------------------------------------------------------------------------- /main/__pycache__/tasks.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/tasks.cpython-37.pyc -------------------------------------------------------------------------------- /main/__pycache__/tool.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/tool.cpython-36.pyc -------------------------------------------------------------------------------- /main/__pycache__/tool.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/tool.cpython-37.pyc -------------------------------------------------------------------------------- /main/__pycache__/views.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/views.cpython-36.pyc -------------------------------------------------------------------------------- /main/__pycache__/views.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/__pycache__/views.cpython-37.pyc -------------------------------------------------------------------------------- /main/cache.py: -------------------------------------------------------------------------------- 1 | from main.models import BigCategor 2 | 3 | class categor: 4 | def __init__(self,id,name,hot,icon): 5 | self.id=id 6 | self.name=name 7 | self.hot=hot 8 | self.icon=icon 9 | 10 | #注意此处可能引起无法正常启动,必要时注释或解决 11 | try: 12 | datas=BigCategor.query.all() 13 | categors=[] 14 | for c in datas: 15 | categors.append(categor(c.id,c.name,c.hot,c.icon)) 16 | except: 17 | categors=[] 18 | print("未正确查找到侧边导航项目") 19 | -------------------------------------------------------------------------------- /main/config.py: -------------------------------------------------------------------------------- 1 | import os 2 | from datetime import timedelta 3 | basedir=os.path.abspath(os.path.dirname(__file__)) 4 | 5 | 6 | #只有大写命名会被加载到配置中 7 | SECRET_KEY=os.environ.get('SECRET_KEY') or 'biu,biu,biu' 8 | FLASKY_ADMIN=os.environ.get('FLASKY_ADMIN') 9 | 10 | #数据库配置 11 | SQLALCHEMY_DATABASE_URI='sqlite:///'+os.path.join(basedir,"data",'blog_collect.db?check_same_thread=False')# 12 | SQLALCHEMY_TRACK_MODIFICATIONS = False 13 | UPLOAD_LOGO_PATH=os.path.join(basedir,'data','logo') 14 | 15 | #激活跨站点请求伪造保护,激活更安全 16 | CSRF_ENABLED=True 17 | 18 | #每行显示博客卡片个数 19 | BLOGS_PER_ROW=4 20 | 21 | #每类最多显示博客个数 22 | BLOGS_PER_CATE=40 23 | 24 | #每次Ajax加载帖子数量 25 | POSTS_PER_NUMS=10 26 | 27 | #最大上传文件大小 28 | MAX_CONTENT_LENGTH=3*1024*1024 29 | 30 | #自动刷新模板 31 | TEMPLATES_AUTO_RELOAD = True 32 | 33 | 34 | #邮件配置 35 | MAIL_DEBUG = True # 开启debug,便于调试看信息 36 | MAIL_SUPPRESS_SEND = False # 发送邮件,为True则不发送 37 | MAIL_SERVER = 'smtp.qq.com' # 邮箱服务器 38 | MAIL_PORT = 465 # 端口 39 | MAIL_USE_SSL = True # 重要,qq邮箱需要使用SSL 40 | MAIL_USE_TLS = False # 不需要使用TLS 41 | MAIL_USERNAME = 'admin@qq.com' # 填邮箱 42 | MAIL_PASSWORD = '' # 填授权码 43 | MAIL_DEFAULT_SENDER= 'admin@qq.com' #默认发送人 44 | FLASKY_MAIL_SUBJECT_PREFIX = '[MyBlog团队]' #标题前缀 45 | ADMINS = ['admin@qq.com'] #管理员 46 | 47 | 48 | #Redis-Celery配置 49 | CELERY_BROKER_URL="redis://127.0.0.1:6379/0" 50 | CELERY_RESULT_BACKEND="redis://127.0.0.1:6379/0" 51 | CELERYD_PREFETCH_MULTIPLIER = 2 #每次取的任务工作数量 52 | CELERY_TASK_RESULT_EXPIRES = 600 #超时时间10分钟 53 | CELERYD_CONCURRENCY = 2 #并发Workder数 54 | 55 | 56 | -------------------------------------------------------------------------------- /main/data/blog_collect.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/data/blog_collect.db -------------------------------------------------------------------------------- /main/forms.py: -------------------------------------------------------------------------------- 1 | from flask_wtf import FlaskForm 2 | from wtforms import StringField,SelectField,SubmitField,IntegerField,RadioField 3 | from wtforms.validators import Length,DataRequired,URL,AnyOf,Email,ValidationError 4 | from flask_wtf.file import FileField,FileAllowed,FileRequired 5 | from main.cache import categors 6 | from main.models import Blog 7 | 8 | class Email_nullable(Email): 9 | def __call__(self, form, field): 10 | value = field.data 11 | 12 | message = self.message 13 | if message is None: 14 | message = field.gettext('Invalid email address.') 15 | 16 | if value: 17 | 18 | if '@' not in value: 19 | raise ValidationError(message) 20 | 21 | user_part, domain_part = value.rsplit('@', 1) 22 | 23 | if not self.user_regex.match(user_part): 24 | raise ValidationError(message) 25 | 26 | if not self.validate_hostname(domain_part): 27 | raise ValidationError(message) 28 | 29 | class BlogForm(FlaskForm): 30 | logo=FileField("LOGO*",validators=[FileRequired(),FileAllowed(['jpg','jpeg','png','gif','bmp'])]) 31 | name=StringField('博客名称*',validators=[DataRequired(),Length(min=0,max=64)]) 32 | url=StringField('博客主页*',validators=[DataRequired(),URL(),Length(min=0,max=255)]) 33 | email=StringField('登录邮箱*',validators=[Email(),Length(min=0,max=120)]) 34 | # about=StringField('博客简介(限140中文字)',validators=[Length(min=0,max=280)]) 35 | # keyword=StringField('关键词(用逗号分隔,中英文都可以)',validators=[Length(min=0,max=64)]) 36 | categor=SelectField("选择主分类*",validators=[DataRequired()],choices=[(c.id,c.name) for c in categors],coerce=int,default=2) 37 | platform=RadioField("博客平台",choices=[('person','个人博客'),('csdn','CSDN'),('cnblogs','博客园')],default='person') #('jianshu','简书') 38 | submit=SubmitField('提交博客') 39 | 40 | def validate_name(self,name): 41 | blog=Blog.query.filter_by(name=name.data).first() 42 | if blog is not None: 43 | raise ValidationError('博客名已存在') 44 | 45 | def validate_url(self,url): 46 | if self.platform.data=="csdn": 47 | if url.data[8:10]!="me" and url.data[8:12]!="blog": 48 | raise ValidationError("请输入正确的个人主页链接或重新选择博客平台") 49 | 50 | if self.platform.data=="cnblogs": 51 | if url.data[12:19]!="cnblogs": 52 | raise ValidationError("请输入正确的个人主页链接或重新选择博客平台") 53 | 54 | class RRSForm(FlaskForm): 55 | rrs_adress=StringField('RRS地址',validators=[URL(),Length(min=0,max=128)]) 56 | submit1=SubmitField('提交SSR地址') 57 | 58 | 59 | class CrawlForm(FlaskForm): 60 | post_index=StringField('文章列表主页地址',validators=[URL(),Length(min=0,max=128)]) 61 | post_rule=StringField('文章列表分页规则',validators=[Length(min=0,max=128)]) 62 | # post_second_num=IntegerField("列表分页第二页处数字") 63 | post_titles_selector=StringField('文章列表标题选择器',validators=[DataRequired(),Length(min=0,max=128)]) 64 | post_links_selector=StringField('文章列表链接选择器',validators=[DataRequired(),Length(min=0,max=128)]) 65 | post_main_body=StringField('文章页面正文选择器',validators=[DataRequired(),Length(min=0,max=128)]) 66 | submit2=SubmitField('提交爬虫规则') 67 | 68 | def validate_post_rule(self,rule): 69 | if rule.data: 70 | if "" not in rule.data: 71 | raise ValidationError("不在列表分页规则中,若无分页请留空字段") 72 | 73 | class LoginForm(FlaskForm): 74 | email=StringField('邮箱',validators=[Email()]) 75 | 76 | def validate_email(self,email): 77 | blog=Blog.query.filter_by(email=email.data).first() 78 | if blog is None: 79 | raise ValidationError('邮箱不存在') -------------------------------------------------------------------------------- /main/mail.py: -------------------------------------------------------------------------------- 1 | from main.start import app,mail 2 | from flask_mail import Message 3 | from flask import render_template 4 | from threading import Thread 5 | 6 | 7 | #附件发送方法 8 | #attachments=[('posts.json', 'application/json',json.dumps({'posts': data}, indent=4))] 9 | 10 | 11 | 12 | #recipients为列表 13 | def send_mail(subject,text_body=None,html_body=None,sender=None,recipients=None,attachments=None,sync=False): 14 | sender=app.config["MAIL_DEFAULT_SENDER"] 15 | title=app.config["FLASKY_MAIL_SUBJECT_PREFIX"]+" "+subject 16 | msg=Message(title,sender=sender,recipients=recipients) 17 | msg.body=text_body 18 | msg.html=html_body 19 | if attachments: 20 | for attachment in attachments: 21 | msg.attach(*attachment) 22 | 23 | if sync: 24 | mail.send(msg) 25 | else: 26 | #线程发送邮件 27 | Thread(target=send_async_email,args=(app,msg)).start() 28 | 29 | 30 | def send_login_mail(blog): 31 | token=blog.get_token() 32 | send_mail('登录您的账户',recipients=[blog.email], 33 | text_body=render_template('mail/login_blog.txt', 34 | blog=blog,token=token), 35 | html_body=render_template('mail/login_blog.html', 36 | blog=blog,token=token)) 37 | 38 | 39 | def send_crawl_mail(blog): 40 | send_mail('您的文章已更新完毕',recipients=[blog.email], 41 | text_body=render_template('mail/crawl_complete.txt', 42 | blog=blog), 43 | html_body=render_template('mail/crawl_complete.html', 44 | blog=blog)) 45 | 46 | 47 | 48 | def send_async_email(app,msg): 49 | #开启app上下文 50 | with app.app_context(): 51 | #因为send方法需要访问app配置 52 | mail.send(msg) 53 | 54 | 55 | -------------------------------------------------------------------------------- /main/migrations/README: -------------------------------------------------------------------------------- 1 | Generic single-database configuration. -------------------------------------------------------------------------------- /main/migrations/__pycache__/env.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/migrations/__pycache__/env.cpython-37.pyc -------------------------------------------------------------------------------- /main/migrations/alembic.ini: -------------------------------------------------------------------------------- 1 | # A generic, single database configuration. 2 | 3 | [alembic] 4 | # template used to generate migration files 5 | # file_template = %%(rev)s_%%(slug)s 6 | 7 | # set to 'true' to run the environment during 8 | # the 'revision' command, regardless of autogenerate 9 | # revision_environment = false 10 | 11 | 12 | # Logging configuration 13 | [loggers] 14 | keys = root,sqlalchemy,alembic 15 | 16 | [handlers] 17 | keys = console 18 | 19 | [formatters] 20 | keys = generic 21 | 22 | [logger_root] 23 | level = WARN 24 | handlers = console 25 | qualname = 26 | 27 | [logger_sqlalchemy] 28 | level = WARN 29 | handlers = 30 | qualname = sqlalchemy.engine 31 | 32 | [logger_alembic] 33 | level = INFO 34 | handlers = 35 | qualname = alembic 36 | 37 | [handler_console] 38 | class = StreamHandler 39 | args = (sys.stderr,) 40 | level = NOTSET 41 | formatter = generic 42 | 43 | [formatter_generic] 44 | format = %(levelname)-5.5s [%(name)s] %(message)s 45 | datefmt = %H:%M:%S 46 | -------------------------------------------------------------------------------- /main/migrations/env.py: -------------------------------------------------------------------------------- 1 | from __future__ import with_statement 2 | 3 | import logging 4 | from logging.config import fileConfig 5 | 6 | from sqlalchemy import engine_from_config 7 | from sqlalchemy import pool 8 | 9 | from alembic import context 10 | 11 | # this is the Alembic Config object, which provides 12 | # access to the values within the .ini file in use. 13 | config = context.config 14 | 15 | # Interpret the config file for Python logging. 16 | # This line sets up loggers basically. 17 | fileConfig(config.config_file_name) 18 | logger = logging.getLogger('alembic.env') 19 | 20 | # add your model's MetaData object here 21 | # for 'autogenerate' support 22 | # from myapp import mymodel 23 | # target_metadata = mymodel.Base.metadata 24 | from flask import current_app 25 | config.set_main_option( 26 | 'sqlalchemy.url', 27 | str(current_app.extensions['migrate'].db.engine.url).replace('%', '%%')) 28 | target_metadata = current_app.extensions['migrate'].db.metadata 29 | 30 | # other values from the config, defined by the needs of env.py, 31 | # can be acquired: 32 | # my_important_option = config.get_main_option("my_important_option") 33 | # ... etc. 34 | 35 | 36 | def run_migrations_offline(): 37 | """Run migrations in 'offline' mode. 38 | 39 | This configures the context with just a URL 40 | and not an Engine, though an Engine is acceptable 41 | here as well. By skipping the Engine creation 42 | we don't even need a DBAPI to be available. 43 | 44 | Calls to context.execute() here emit the given string to the 45 | script output. 46 | 47 | """ 48 | url = config.get_main_option("sqlalchemy.url") 49 | context.configure( 50 | url=url, target_metadata=target_metadata, literal_binds=True 51 | ) 52 | 53 | with context.begin_transaction(): 54 | context.run_migrations() 55 | 56 | 57 | def run_migrations_online(): 58 | """Run migrations in 'online' mode. 59 | 60 | In this scenario we need to create an Engine 61 | and associate a connection with the context. 62 | 63 | """ 64 | 65 | # this callback is used to prevent an auto-migration from being generated 66 | # when there are no changes to the schema 67 | # reference: http://alembic.zzzcomputing.com/en/latest/cookbook.html 68 | def process_revision_directives(context, revision, directives): 69 | if getattr(config.cmd_opts, 'autogenerate', False): 70 | script = directives[0] 71 | if script.upgrade_ops.is_empty(): 72 | directives[:] = [] 73 | logger.info('No changes in schema detected.') 74 | 75 | connectable = engine_from_config( 76 | config.get_section(config.config_ini_section), 77 | prefix='sqlalchemy.', 78 | poolclass=pool.NullPool, 79 | ) 80 | 81 | with connectable.connect() as connection: 82 | context.configure( 83 | connection=connection, 84 | target_metadata=target_metadata, 85 | process_revision_directives=process_revision_directives, 86 | **current_app.extensions['migrate'].configure_args 87 | ) 88 | 89 | with context.begin_transaction(): 90 | context.run_migrations() 91 | 92 | 93 | if context.is_offline_mode(): 94 | run_migrations_offline() 95 | else: 96 | run_migrations_online() 97 | -------------------------------------------------------------------------------- /main/migrations/script.py.mako: -------------------------------------------------------------------------------- 1 | """${message} 2 | 3 | Revision ID: ${up_revision} 4 | Revises: ${down_revision | comma,n} 5 | Create Date: ${create_date} 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | ${imports if imports else ""} 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = ${repr(up_revision)} 14 | down_revision = ${repr(down_revision)} 15 | branch_labels = ${repr(branch_labels)} 16 | depends_on = ${repr(depends_on)} 17 | 18 | 19 | def upgrade(): 20 | ${upgrades if upgrades else "pass"} 21 | 22 | 23 | def downgrade(): 24 | ${downgrades if downgrades else "pass"} 25 | -------------------------------------------------------------------------------- /main/migrations/versions/0982f7d5be45_.py: -------------------------------------------------------------------------------- 1 | """empty message 2 | 3 | Revision ID: 0982f7d5be45 4 | Revises: 24d76067f7cf 5 | Create Date: 2020-07-02 20:39:15.239025 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '0982f7d5be45' 14 | down_revision = '24d76067f7cf' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.create_table('task', 22 | sa.Column('id', sa.String(length=36), nullable=False), 23 | sa.Column('name', sa.String(length=128), nullable=True), 24 | sa.Column('crawl_id', sa.Integer(), nullable=True), 25 | sa.Column('complete', sa.Boolean(), nullable=True), 26 | sa.ForeignKeyConstraint(['crawl_id'], ['crawls.id'], ), 27 | sa.PrimaryKeyConstraint('id') 28 | ) 29 | with op.batch_alter_table('task', schema=None) as batch_op: 30 | batch_op.create_index(batch_op.f('ix_task_name'), ['name'], unique=False) 31 | 32 | with op.batch_alter_table('posts', schema=None) as batch_op: 33 | batch_op.add_column(sa.Column('md5', sa.String(length=32), nullable=True)) 34 | batch_op.add_column(sa.Column('url', sa.String(length=255), nullable=True)) 35 | 36 | # ### end Alembic commands ### 37 | 38 | 39 | def downgrade(): 40 | # ### commands auto generated by Alembic - please adjust! ### 41 | with op.batch_alter_table('posts', schema=None) as batch_op: 42 | batch_op.drop_column('url') 43 | batch_op.drop_column('md5') 44 | 45 | with op.batch_alter_table('task', schema=None) as batch_op: 46 | batch_op.drop_index(batch_op.f('ix_task_name')) 47 | 48 | op.drop_table('task') 49 | # ### end Alembic commands ### 50 | -------------------------------------------------------------------------------- /main/migrations/versions/24d76067f7cf_.py: -------------------------------------------------------------------------------- 1 | """empty message 2 | 3 | Revision ID: 24d76067f7cf 4 | Revises: 87b301973f6e 5 | Create Date: 2020-07-01 18:15:13.612442 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '24d76067f7cf' 14 | down_revision = '87b301973f6e' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.create_table('crawls', 22 | sa.Column('id', sa.Integer(), nullable=False), 23 | sa.Column('rrs', sa.String(length=255), nullable=True), 24 | sa.Column('p_home', sa.String(length=255), nullable=True), 25 | sa.Column('p_page', sa.String(length=225), nullable=True), 26 | sa.Column('p_title', sa.String(length=125), nullable=True), 27 | sa.Column('p_link', sa.String(length=125), nullable=True), 28 | sa.Column('p_body', sa.String(length=125), nullable=True), 29 | sa.Column('blog_id', sa.Integer(), nullable=True), 30 | sa.ForeignKeyConstraint(['blog_id'], ['blogs.id'], ), 31 | sa.PrimaryKeyConstraint('id') 32 | ) 33 | with op.batch_alter_table('blogs', schema=None) as batch_op: 34 | batch_op.add_column(sa.Column('platform', sa.String(length=20), nullable=True)) 35 | 36 | # ### end Alembic commands ### 37 | 38 | 39 | def downgrade(): 40 | # ### commands auto generated by Alembic - please adjust! ### 41 | with op.batch_alter_table('blogs', schema=None) as batch_op: 42 | batch_op.drop_column('platform') 43 | 44 | op.drop_table('crawls') 45 | # ### end Alembic commands ### 46 | -------------------------------------------------------------------------------- /main/migrations/versions/491417b3537e_.py: -------------------------------------------------------------------------------- 1 | """empty message 2 | 3 | Revision ID: 491417b3537e 4 | Revises: ff38a18013c9 5 | Create Date: 2020-07-07 17:03:40.084704 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '491417b3537e' 14 | down_revision = 'ff38a18013c9' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('crawls', schema=None) as batch_op: 22 | batch_op.add_column(sa.Column('taskdone', sa.Boolean(), nullable=True)) 23 | 24 | # ### end Alembic commands ### 25 | 26 | 27 | def downgrade(): 28 | # ### commands auto generated by Alembic - please adjust! ### 29 | with op.batch_alter_table('crawls', schema=None) as batch_op: 30 | batch_op.drop_column('taskdone') 31 | 32 | # ### end Alembic commands ### 33 | -------------------------------------------------------------------------------- /main/migrations/versions/87b301973f6e_.py: -------------------------------------------------------------------------------- 1 | """empty message 2 | 3 | Revision ID: 87b301973f6e 4 | Revises: 5 | Create Date: 2020-06-26 23:04:26.599596 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '87b301973f6e' 14 | down_revision = None 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.create_table('bigcategors', 22 | sa.Column('id', sa.Integer(), nullable=False), 23 | sa.Column('name', sa.String(length=32), nullable=False), 24 | sa.Column('hot', sa.Boolean(), nullable=True), 25 | sa.Column('icon', sa.String(length=20), nullable=True), 26 | sa.PrimaryKeyConstraint('id'), 27 | sa.UniqueConstraint('name') 28 | ) 29 | op.create_table('blogs', 30 | sa.Column('id', sa.Integer(), nullable=False), 31 | sa.Column('name', sa.String(length=32), nullable=False), 32 | sa.Column('email', sa.String(length=120), nullable=True), 33 | sa.Column('homepage', sa.String(length=255), nullable=False), 34 | sa.Column('about', sa.String(length=280), nullable=True), 35 | sa.Column('last_update', sa.DateTime(), nullable=True), 36 | sa.Column('logo', sa.String(length=80), nullable=True), 37 | sa.Column('keyword', sa.String(length=64), nullable=True), 38 | sa.Column('big_categor_id', sa.Integer(), nullable=True), 39 | sa.ForeignKeyConstraint(['big_categor_id'], ['bigcategors.id'], ), 40 | sa.PrimaryKeyConstraint('id'), 41 | sa.UniqueConstraint('homepage') 42 | ) 43 | with op.batch_alter_table('blogs', schema=None) as batch_op: 44 | batch_op.create_index(batch_op.f('ix_blogs_email'), ['email'], unique=True) 45 | batch_op.create_index(batch_op.f('ix_blogs_name'), ['name'], unique=True) 46 | 47 | op.create_table('posts', 48 | sa.Column('id', sa.Integer(), nullable=False), 49 | sa.Column('title', sa.String(length=32), nullable=True), 50 | sa.Column('body', sa.String(length=140), nullable=True), 51 | sa.Column('recommend', sa.Boolean(), nullable=True), 52 | sa.Column('blog_id', sa.Integer(), nullable=True), 53 | sa.ForeignKeyConstraint(['blog_id'], ['blogs.id'], ), 54 | sa.PrimaryKeyConstraint('id') 55 | ) 56 | # ### end Alembic commands ### 57 | 58 | 59 | def downgrade(): 60 | # ### commands auto generated by Alembic - please adjust! ### 61 | op.drop_table('posts') 62 | with op.batch_alter_table('blogs', schema=None) as batch_op: 63 | batch_op.drop_index(batch_op.f('ix_blogs_name')) 64 | batch_op.drop_index(batch_op.f('ix_blogs_email')) 65 | 66 | op.drop_table('blogs') 67 | op.drop_table('bigcategors') 68 | # ### end Alembic commands ### 69 | -------------------------------------------------------------------------------- /main/migrations/versions/9c1bf19bd97a_.py: -------------------------------------------------------------------------------- 1 | """empty message 2 | 3 | Revision ID: 9c1bf19bd97a 4 | Revises: 491417b3537e 5 | Create Date: 2020-07-07 19:11:06.762146 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '9c1bf19bd97a' 14 | down_revision = '491417b3537e' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('crawls', schema=None) as batch_op: 22 | batch_op.add_column(sa.Column('urlset', sa.Text(), nullable=True)) 23 | 24 | # ### end Alembic commands ### 25 | 26 | 27 | def downgrade(): 28 | # ### commands auto generated by Alembic - please adjust! ### 29 | with op.batch_alter_table('crawls', schema=None) as batch_op: 30 | batch_op.drop_column('urlset') 31 | 32 | # ### end Alembic commands ### 33 | -------------------------------------------------------------------------------- /main/migrations/versions/__pycache__/0982f7d5be45_.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/migrations/versions/__pycache__/0982f7d5be45_.cpython-37.pyc -------------------------------------------------------------------------------- /main/migrations/versions/__pycache__/24d76067f7cf_.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/migrations/versions/__pycache__/24d76067f7cf_.cpython-37.pyc -------------------------------------------------------------------------------- /main/migrations/versions/__pycache__/491417b3537e_.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/migrations/versions/__pycache__/491417b3537e_.cpython-37.pyc -------------------------------------------------------------------------------- /main/migrations/versions/__pycache__/87b301973f6e_.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/migrations/versions/__pycache__/87b301973f6e_.cpython-37.pyc -------------------------------------------------------------------------------- /main/migrations/versions/__pycache__/9c1bf19bd97a_.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/migrations/versions/__pycache__/9c1bf19bd97a_.cpython-37.pyc -------------------------------------------------------------------------------- /main/migrations/versions/__pycache__/b5ff6e74714a_.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/migrations/versions/__pycache__/b5ff6e74714a_.cpython-37.pyc -------------------------------------------------------------------------------- /main/migrations/versions/__pycache__/c089c44a60fc_.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/migrations/versions/__pycache__/c089c44a60fc_.cpython-37.pyc -------------------------------------------------------------------------------- /main/migrations/versions/__pycache__/ff38a18013c9_.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/migrations/versions/__pycache__/ff38a18013c9_.cpython-37.pyc -------------------------------------------------------------------------------- /main/migrations/versions/b5ff6e74714a_.py: -------------------------------------------------------------------------------- 1 | """empty message 2 | 3 | Revision ID: b5ff6e74714a 4 | Revises: 9c1bf19bd97a 5 | Create Date: 2020-07-08 18:30:43.670236 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = 'b5ff6e74714a' 14 | down_revision = '9c1bf19bd97a' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('posts', schema=None) as batch_op: 22 | batch_op.add_column(sa.Column('digest', sa.String(length=300), nullable=True)) 23 | 24 | # ### end Alembic commands ### 25 | 26 | 27 | def downgrade(): 28 | # ### commands auto generated by Alembic - please adjust! ### 29 | with op.batch_alter_table('posts', schema=None) as batch_op: 30 | batch_op.drop_column('digest') 31 | 32 | # ### end Alembic commands ### 33 | -------------------------------------------------------------------------------- /main/migrations/versions/c089c44a60fc_.py: -------------------------------------------------------------------------------- 1 | """empty message 2 | 3 | Revision ID: c089c44a60fc 4 | Revises: 0982f7d5be45 5 | Create Date: 2020-07-04 01:45:34.801099 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = 'c089c44a60fc' 14 | down_revision = '0982f7d5be45' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.create_table('tasks', 22 | sa.Column('id', sa.String(length=36), nullable=False), 23 | sa.Column('name', sa.String(length=128), nullable=True), 24 | sa.Column('crawl_id', sa.Integer(), nullable=True), 25 | sa.Column('complete', sa.Boolean(), nullable=True), 26 | sa.ForeignKeyConstraint(['crawl_id'], ['crawls.id'], ), 27 | sa.PrimaryKeyConstraint('id') 28 | ) 29 | with op.batch_alter_table('tasks', schema=None) as batch_op: 30 | batch_op.create_index(batch_op.f('ix_tasks_name'), ['name'], unique=False) 31 | 32 | with op.batch_alter_table('task', schema=None) as batch_op: 33 | batch_op.drop_index('ix_task_name') 34 | 35 | op.drop_table('task') 36 | with op.batch_alter_table('posts', schema=None) as batch_op: 37 | batch_op.drop_column('md5') 38 | 39 | # ### end Alembic commands ### 40 | 41 | 42 | def downgrade(): 43 | # ### commands auto generated by Alembic - please adjust! ### 44 | with op.batch_alter_table('posts', schema=None) as batch_op: 45 | batch_op.add_column(sa.Column('md5', sa.VARCHAR(length=32), nullable=True)) 46 | 47 | op.create_table('task', 48 | sa.Column('id', sa.VARCHAR(length=36), nullable=False), 49 | sa.Column('name', sa.VARCHAR(length=128), nullable=True), 50 | sa.Column('crawl_id', sa.INTEGER(), nullable=True), 51 | sa.Column('complete', sa.BOOLEAN(), nullable=True), 52 | sa.CheckConstraint('complete IN (0, 1)'), 53 | sa.ForeignKeyConstraint(['crawl_id'], ['crawls.id'], ), 54 | sa.PrimaryKeyConstraint('id') 55 | ) 56 | with op.batch_alter_table('task', schema=None) as batch_op: 57 | batch_op.create_index('ix_task_name', ['name'], unique=False) 58 | 59 | with op.batch_alter_table('tasks', schema=None) as batch_op: 60 | batch_op.drop_index(batch_op.f('ix_tasks_name')) 61 | 62 | op.drop_table('tasks') 63 | # ### end Alembic commands ### 64 | -------------------------------------------------------------------------------- /main/migrations/versions/ff38a18013c9_.py: -------------------------------------------------------------------------------- 1 | """empty message 2 | 3 | Revision ID: ff38a18013c9 4 | Revises: c089c44a60fc 5 | Create Date: 2020-07-05 20:37:33.846056 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = 'ff38a18013c9' 14 | down_revision = 'c089c44a60fc' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('tasks', schema=None) as batch_op: 22 | batch_op.drop_index('ix_tasks_name') 23 | 24 | op.drop_table('tasks') 25 | with op.batch_alter_table('crawls', schema=None) as batch_op: 26 | batch_op.add_column(sa.Column('taskid', sa.String(length=125), nullable=True)) 27 | 28 | # ### end Alembic commands ### 29 | 30 | 31 | def downgrade(): 32 | # ### commands auto generated by Alembic - please adjust! ### 33 | with op.batch_alter_table('crawls', schema=None) as batch_op: 34 | batch_op.drop_column('taskid') 35 | 36 | op.create_table('tasks', 37 | sa.Column('id', sa.VARCHAR(length=36), nullable=False), 38 | sa.Column('name', sa.VARCHAR(length=128), nullable=True), 39 | sa.Column('crawl_id', sa.INTEGER(), nullable=True), 40 | sa.Column('complete', sa.BOOLEAN(), nullable=True), 41 | sa.CheckConstraint('complete IN (0, 1)'), 42 | sa.ForeignKeyConstraint(['crawl_id'], ['crawls.id'], ), 43 | sa.PrimaryKeyConstraint('id') 44 | ) 45 | with op.batch_alter_table('tasks', schema=None) as batch_op: 46 | batch_op.create_index('ix_tasks_name', ['name'], unique=False) 47 | 48 | # ### end Alembic commands ### 49 | -------------------------------------------------------------------------------- /main/shell_manage.py: -------------------------------------------------------------------------------- 1 | from flask_script import Shell 2 | from main.start import app,db,manager 3 | from main.models import BigCategor,Blog 4 | 5 | #shell注册 6 | def make_shell_context(): 7 | return dict(app=app,db=db,Blog=Blog,BigCategor=BigCategor) 8 | 9 | manager.add_command("shell",Shell(make_context=make_shell_context)) -------------------------------------------------------------------------------- /main/start.py: -------------------------------------------------------------------------------- 1 | from flask import Flask 2 | from flask_sqlalchemy import SQLAlchemy 3 | from flask_migrate import Migrate 4 | from flask_script import Manager 5 | from flask_avatars import Avatars 6 | from flask_cli import FlaskCLI 7 | from flask_login import LoginManager 8 | from flask_mail import Mail 9 | from celery import Celery 10 | 11 | 12 | #初始化 13 | app=Flask(__name__) 14 | app.config.from_object('main.config') 15 | db=SQLAlchemy(app) 16 | migrate=Migrate(app,db,render_as_batch=True) 17 | manager=Manager(app) 18 | avatars=Avatars(app) 19 | cli=FlaskCLI(app) 20 | login=LoginManager(app) 21 | mail=Mail(app) 22 | 23 | 24 | #模块配置 25 | login.login_view='login' 26 | celery=Celery(app.import_name, backend="redis://127.0.0.1:6379/0", broker="redis://127.0.0.1:6379/0") 27 | celery.conf.update(app.config) 28 | 29 | #个人设置 30 | app.jinja_env.auto_reload=True 31 | 32 | 33 | #监听文件 34 | import main.models 35 | import main.views 36 | import main.tasks 37 | 38 | #注册函数与数据 39 | import main.shell_manage 40 | import main.tools.make_fake_data 41 | 42 | 43 | -------------------------------------------------------------------------------- /main/static/css/button-demo.css: -------------------------------------------------------------------------------- 1 | .btn{ 2 | color: #fff; 3 | text-transform: uppercase; 4 | border-radius: 0; 5 | padding-left: 60px; 6 | position: relative; 7 | transform: translateZ(0px); 8 | transition: all 0.5s ease 0s; 9 | } 10 | .btn:after{ 11 | content: ""; 12 | position: absolute; 13 | top: 0; 14 | left: 0; 15 | bottom: 0; 16 | right: 0; 17 | background: #fff; 18 | z-index: -1; 19 | transform: scaleX(0); 20 | transform-origin: 100% 50% 0; 21 | transition: all 0.5s ease-out 0s; 22 | } 23 | .btn:hover:after{ 24 | transform: scaleX(1); 25 | transition-timing-function: cubic-bezier(0.52, 1.64, 0.37, 0.66); 26 | } 27 | .btn span{ 28 | width: 40px; 29 | height: 100%; 30 | line-height: 40px; 31 | background: #fff; 32 | position: absolute; 33 | top: 0; 34 | left: 0; 35 | transition: all 0.3s linear 0s; 36 | } 37 | .btn span:after{ 38 | content: ""; 39 | display: block; 40 | width: 10px; 41 | height: 10px; 42 | background: #fff; 43 | margin: auto 0; 44 | position: absolute; 45 | top: 0; 46 | right: -6px; 47 | bottom: 0; 48 | transform: rotate(45deg); 49 | transition: all 0.3s linear 0s; 50 | } 51 | .btn.btn-sm{ 52 | padding-left: 40px; 53 | } 54 | .btn.btn-sm span{ 55 | width: 27px; 56 | line-height: 27px; 57 | } 58 | .btn.btn-sm span:after{ 59 | width: 8px; 60 | height: 8px; 61 | right: -5px; 62 | } 63 | .btn.btn-xs{ 64 | padding-left: 30px; 65 | } 66 | .btn.btn-xs span{ 67 | width: 20px; 68 | line-height: 20px; 69 | } 70 | .btn.btn-xs span:after{ 71 | width: 7px; 72 | height: 7px; 73 | right: -4px; 74 | } 75 | .btn.red{ 76 | border: 1px solid #fe6d6d; 77 | background: #fe6d6d; 78 | } 79 | .btn.red:hover, 80 | .btn.red span{ 81 | color: #fe6d6d; 82 | } 83 | .btn.red:hover span, 84 | .btn.red:hover span:after{ 85 | background: #fe6d6d; 86 | } 87 | .btn.blue{ 88 | border: 1px solid #3bb4e5; 89 | background: #3bb4e5; 90 | } 91 | .btn.blue:hover, 92 | .btn.blue span{ 93 | color: #3bb4e5; 94 | } 95 | .btn.blue:hover span, 96 | .btn.blue:hover span:after{ 97 | background: #3bb4e5; 98 | } 99 | .btn.orange{ 100 | border: 1px solid #ee955b; 101 | background: #ee955b; 102 | } 103 | .btn.orange:hover, 104 | .btn.orange span{ 105 | color: #ee955b; 106 | } 107 | .btn.orange:hover span, 108 | .btn.orange:hover span:after{ 109 | background: #ee955b; 110 | } 111 | .btn.green{ 112 | border: 1px solid #79d799; 113 | background: #79d799; 114 | } 115 | .btn.green:hover, 116 | .btn.green span{ 117 | color: #79d799; 118 | } 119 | .btn.green:hover span, 120 | .btn.green:hover span:after{ 121 | background: #79d799; 122 | } 123 | .btn:hover span{ 124 | color: #fff; 125 | } 126 | @media only screen and (max-width: 767px){ 127 | .btn{ margin-bottom: 20px; } 128 | } -------------------------------------------------------------------------------- /main/static/css/custom.css: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * Apply your custom CSS here 4 | * 5 | */ 6 | 7 | body { 8 | } 9 | 10 | a { 11 | } -------------------------------------------------------------------------------- /main/static/css/fonts/elusive/css/animation.css: -------------------------------------------------------------------------------- 1 | /* 2 | Animation example, for spinners 3 | */ 4 | .animate-spin { 5 | -moz-animation: spin 2s infinite linear; 6 | -o-animation: spin 2s infinite linear; 7 | -webkit-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | display: inline-block; 10 | } 11 | @-moz-keyframes spin { 12 | 0% { 13 | -moz-transform: rotate(0deg); 14 | -o-transform: rotate(0deg); 15 | -webkit-transform: rotate(0deg); 16 | transform: rotate(0deg); 17 | } 18 | 19 | 100% { 20 | -moz-transform: rotate(359deg); 21 | -o-transform: rotate(359deg); 22 | -webkit-transform: rotate(359deg); 23 | transform: rotate(359deg); 24 | } 25 | } 26 | @-webkit-keyframes spin { 27 | 0% { 28 | -moz-transform: rotate(0deg); 29 | -o-transform: rotate(0deg); 30 | -webkit-transform: rotate(0deg); 31 | transform: rotate(0deg); 32 | } 33 | 34 | 100% { 35 | -moz-transform: rotate(359deg); 36 | -o-transform: rotate(359deg); 37 | -webkit-transform: rotate(359deg); 38 | transform: rotate(359deg); 39 | } 40 | } 41 | @-o-keyframes spin { 42 | 0% { 43 | -moz-transform: rotate(0deg); 44 | -o-transform: rotate(0deg); 45 | -webkit-transform: rotate(0deg); 46 | transform: rotate(0deg); 47 | } 48 | 49 | 100% { 50 | -moz-transform: rotate(359deg); 51 | -o-transform: rotate(359deg); 52 | -webkit-transform: rotate(359deg); 53 | transform: rotate(359deg); 54 | } 55 | } 56 | @-ms-keyframes spin { 57 | 0% { 58 | -moz-transform: rotate(0deg); 59 | -o-transform: rotate(0deg); 60 | -webkit-transform: rotate(0deg); 61 | transform: rotate(0deg); 62 | } 63 | 64 | 100% { 65 | -moz-transform: rotate(359deg); 66 | -o-transform: rotate(359deg); 67 | -webkit-transform: rotate(359deg); 68 | transform: rotate(359deg); 69 | } 70 | } 71 | @keyframes spin { 72 | 0% { 73 | -moz-transform: rotate(0deg); 74 | -o-transform: rotate(0deg); 75 | -webkit-transform: rotate(0deg); 76 | transform: rotate(0deg); 77 | } 78 | 79 | 100% { 80 | -moz-transform: rotate(359deg); 81 | -o-transform: rotate(359deg); 82 | -webkit-transform: rotate(359deg); 83 | transform: rotate(359deg); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /main/static/css/fonts/elusive/font/elusive.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/css/fonts/elusive/font/elusive.eot -------------------------------------------------------------------------------- /main/static/css/fonts/elusive/font/elusive.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/css/fonts/elusive/font/elusive.ttf -------------------------------------------------------------------------------- /main/static/css/fonts/elusive/font/elusive.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/css/fonts/elusive/font/elusive.woff -------------------------------------------------------------------------------- /main/static/css/fonts/fontawesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/css/fonts/fontawesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /main/static/css/fonts/fontawesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/css/fonts/fontawesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /main/static/css/fonts/fontawesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/css/fonts/fontawesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /main/static/css/fonts/fontawesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/css/fonts/fontawesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /main/static/css/fonts/glyphicons/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/css/fonts/glyphicons/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /main/static/css/fonts/glyphicons/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/css/fonts/glyphicons/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /main/static/css/fonts/glyphicons/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/css/fonts/glyphicons/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /main/static/css/fonts/linecons/css/animation.css: -------------------------------------------------------------------------------- 1 | /* 2 | Animation example, for spinners 3 | */ 4 | .animate-spin { 5 | -moz-animation: spin 2s infinite linear; 6 | -o-animation: spin 2s infinite linear; 7 | -webkit-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | display: inline-block; 10 | } 11 | @-moz-keyframes spin { 12 | 0% { 13 | -moz-transform: rotate(0deg); 14 | -o-transform: rotate(0deg); 15 | -webkit-transform: rotate(0deg); 16 | transform: rotate(0deg); 17 | } 18 | 19 | 100% { 20 | -moz-transform: rotate(359deg); 21 | -o-transform: rotate(359deg); 22 | -webkit-transform: rotate(359deg); 23 | transform: rotate(359deg); 24 | } 25 | } 26 | @-webkit-keyframes spin { 27 | 0% { 28 | -moz-transform: rotate(0deg); 29 | -o-transform: rotate(0deg); 30 | -webkit-transform: rotate(0deg); 31 | transform: rotate(0deg); 32 | } 33 | 34 | 100% { 35 | -moz-transform: rotate(359deg); 36 | -o-transform: rotate(359deg); 37 | -webkit-transform: rotate(359deg); 38 | transform: rotate(359deg); 39 | } 40 | } 41 | @-o-keyframes spin { 42 | 0% { 43 | -moz-transform: rotate(0deg); 44 | -o-transform: rotate(0deg); 45 | -webkit-transform: rotate(0deg); 46 | transform: rotate(0deg); 47 | } 48 | 49 | 100% { 50 | -moz-transform: rotate(359deg); 51 | -o-transform: rotate(359deg); 52 | -webkit-transform: rotate(359deg); 53 | transform: rotate(359deg); 54 | } 55 | } 56 | @-ms-keyframes spin { 57 | 0% { 58 | -moz-transform: rotate(0deg); 59 | -o-transform: rotate(0deg); 60 | -webkit-transform: rotate(0deg); 61 | transform: rotate(0deg); 62 | } 63 | 64 | 100% { 65 | -moz-transform: rotate(359deg); 66 | -o-transform: rotate(359deg); 67 | -webkit-transform: rotate(359deg); 68 | transform: rotate(359deg); 69 | } 70 | } 71 | @keyframes spin { 72 | 0% { 73 | -moz-transform: rotate(0deg); 74 | -o-transform: rotate(0deg); 75 | -webkit-transform: rotate(0deg); 76 | transform: rotate(0deg); 77 | } 78 | 79 | 100% { 80 | -moz-transform: rotate(359deg); 81 | -o-transform: rotate(359deg); 82 | -webkit-transform: rotate(359deg); 83 | transform: rotate(359deg); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /main/static/css/fonts/linecons/css/linecons-codes.css: -------------------------------------------------------------------------------- 1 | 2 | .linecons-music:before { content: '\e800'; } /* '' */ 3 | .linecons-search:before { content: '\e801'; } /* '' */ 4 | .linecons-mail:before { content: '\e802'; } /* '' */ 5 | .linecons-heart:before { content: '\e803'; } /* '' */ 6 | .linecons-star:before { content: '\e804'; } /* '' */ 7 | .linecons-user:before { content: '\e805'; } /* '' */ 8 | .linecons-videocam:before { content: '\e806'; } /* '' */ 9 | .linecons-camera:before { content: '\e807'; } /* '' */ 10 | .linecons-photo:before { content: '\e808'; } /* '' */ 11 | .linecons-attach:before { content: '\e809'; } /* '' */ 12 | .linecons-lock:before { content: '\e80a'; } /* '' */ 13 | .linecons-eye:before { content: '\e80b'; } /* '' */ 14 | .linecons-tag:before { content: '\e80c'; } /* '' */ 15 | .linecons-thumbs-up:before { content: '\e80d'; } /* '' */ 16 | .linecons-pencil:before { content: '\e80e'; } /* '' */ 17 | .linecons-comment:before { content: '\e80f'; } /* '' */ 18 | .linecons-location:before { content: '\e810'; } /* '' */ 19 | .linecons-cup:before { content: '\e811'; } /* '' */ 20 | .linecons-trash:before { content: '\e812'; } /* '' */ 21 | .linecons-doc:before { content: '\e813'; } /* '' */ 22 | .linecons-note:before { content: '\e814'; } /* '' */ 23 | .linecons-cog:before { content: '\e815'; } /* '' */ 24 | .linecons-params:before { content: '\e816'; } /* '' */ 25 | .linecons-calendar:before { content: '\e817'; } /* '' */ 26 | .linecons-sound:before { content: '\e818'; } /* '' */ 27 | .linecons-clock:before { content: '\e819'; } /* '' */ 28 | .linecons-lightbulb:before { content: '\e81a'; } /* '' */ 29 | .linecons-tv:before { content: '\e81b'; } /* '' */ 30 | .linecons-desktop:before { content: '\e81c'; } /* '' */ 31 | .linecons-mobile:before { content: '\e81d'; } /* '' */ 32 | .linecons-cd:before { content: '\e81e'; } /* '' */ 33 | .linecons-inbox:before { content: '\e81f'; } /* '' */ 34 | .linecons-globe:before { content: '\e820'; } /* '' */ 35 | .linecons-cloud:before { content: '\e821'; } /* '' */ 36 | .linecons-paper-plane:before { content: '\e822'; } /* '' */ 37 | .linecons-fire:before { content: '\e823'; } /* '' */ 38 | .linecons-graduation-cap:before { content: '\e824'; } /* '' */ 39 | .linecons-megaphone:before { content: '\e825'; } /* '' */ 40 | .linecons-database:before { content: '\e826'; } /* '' */ 41 | .linecons-key:before { content: '\e827'; } /* '' */ 42 | .linecons-beaker:before { content: '\e828'; } /* '' */ 43 | .linecons-truck:before { content: '\e829'; } /* '' */ 44 | .linecons-money:before { content: '\e82a'; } /* '' */ 45 | .linecons-food:before { content: '\e82b'; } /* '' */ 46 | .linecons-shop:before { content: '\e82c'; } /* '' */ 47 | .linecons-diamond:before { content: '\e82d'; } /* '' */ 48 | .linecons-t-shirt:before { content: '\e82e'; } /* '' */ 49 | .linecons-wallet:before { content: '\e82f'; } /* '' */ -------------------------------------------------------------------------------- /main/static/css/fonts/linecons/font/linecons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/css/fonts/linecons/font/linecons.eot -------------------------------------------------------------------------------- /main/static/css/fonts/linecons/font/linecons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/css/fonts/linecons/font/linecons.ttf -------------------------------------------------------------------------------- /main/static/css/fonts/linecons/font/linecons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/css/fonts/linecons/font/linecons.woff -------------------------------------------------------------------------------- /main/static/css/fonts/meteocons/css/animation.css: -------------------------------------------------------------------------------- 1 | /* 2 | Animation example, for spinners 3 | */ 4 | .animate-spin { 5 | -moz-animation: spin 2s infinite linear; 6 | -o-animation: spin 2s infinite linear; 7 | -webkit-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | display: inline-block; 10 | } 11 | @-moz-keyframes spin { 12 | 0% { 13 | -moz-transform: rotate(0deg); 14 | -o-transform: rotate(0deg); 15 | -webkit-transform: rotate(0deg); 16 | transform: rotate(0deg); 17 | } 18 | 19 | 100% { 20 | -moz-transform: rotate(359deg); 21 | -o-transform: rotate(359deg); 22 | -webkit-transform: rotate(359deg); 23 | transform: rotate(359deg); 24 | } 25 | } 26 | @-webkit-keyframes spin { 27 | 0% { 28 | -moz-transform: rotate(0deg); 29 | -o-transform: rotate(0deg); 30 | -webkit-transform: rotate(0deg); 31 | transform: rotate(0deg); 32 | } 33 | 34 | 100% { 35 | -moz-transform: rotate(359deg); 36 | -o-transform: rotate(359deg); 37 | -webkit-transform: rotate(359deg); 38 | transform: rotate(359deg); 39 | } 40 | } 41 | @-o-keyframes spin { 42 | 0% { 43 | -moz-transform: rotate(0deg); 44 | -o-transform: rotate(0deg); 45 | -webkit-transform: rotate(0deg); 46 | transform: rotate(0deg); 47 | } 48 | 49 | 100% { 50 | -moz-transform: rotate(359deg); 51 | -o-transform: rotate(359deg); 52 | -webkit-transform: rotate(359deg); 53 | transform: rotate(359deg); 54 | } 55 | } 56 | @-ms-keyframes spin { 57 | 0% { 58 | -moz-transform: rotate(0deg); 59 | -o-transform: rotate(0deg); 60 | -webkit-transform: rotate(0deg); 61 | transform: rotate(0deg); 62 | } 63 | 64 | 100% { 65 | -moz-transform: rotate(359deg); 66 | -o-transform: rotate(359deg); 67 | -webkit-transform: rotate(359deg); 68 | transform: rotate(359deg); 69 | } 70 | } 71 | @keyframes spin { 72 | 0% { 73 | -moz-transform: rotate(0deg); 74 | -o-transform: rotate(0deg); 75 | -webkit-transform: rotate(0deg); 76 | transform: rotate(0deg); 77 | } 78 | 79 | 100% { 80 | -moz-transform: rotate(359deg); 81 | -o-transform: rotate(359deg); 82 | -webkit-transform: rotate(359deg); 83 | transform: rotate(359deg); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /main/static/css/fonts/meteocons/css/meteocons-codes.css: -------------------------------------------------------------------------------- 1 | 2 | .meteocons-windy-rain-inv:before { content: '\e800'; } /* '' */ 3 | .meteocons-snow-inv:before { content: '\e801'; } /* '' */ 4 | .meteocons-snow-heavy-inv:before { content: '\e802'; } /* '' */ 5 | .meteocons-hail-inv:before { content: '\e803'; } /* '' */ 6 | .meteocons-clouds-inv:before { content: '\e804'; } /* '' */ 7 | .meteocons-clouds-flash-inv:before { content: '\e805'; } /* '' */ 8 | .meteocons-temperature:before { content: '\e806'; } /* '' */ 9 | .meteocons-compass:before { content: '\e807'; } /* '' */ 10 | .meteocons-na:before { content: '\e808'; } /* '' */ 11 | .meteocons-celcius:before { content: '\e809'; } /* '' */ 12 | .meteocons-fahrenheit:before { content: '\e80a'; } /* '' */ 13 | .meteocons-clouds-flash-alt:before { content: '\e80b'; } /* '' */ 14 | .meteocons-sun-inv:before { content: '\e80c'; } /* '' */ 15 | .meteocons-moon-inv:before { content: '\e80d'; } /* '' */ 16 | .meteocons-cloud-sun-inv:before { content: '\e80e'; } /* '' */ 17 | .meteocons-cloud-moon-inv:before { content: '\e80f'; } /* '' */ 18 | .meteocons-cloud-inv:before { content: '\e810'; } /* '' */ 19 | .meteocons-cloud-flash-inv:before { content: '\e811'; } /* '' */ 20 | .meteocons-drizzle-inv:before { content: '\e812'; } /* '' */ 21 | .meteocons-rain-inv:before { content: '\e813'; } /* '' */ 22 | .meteocons-windy-inv:before { content: '\e814'; } /* '' */ 23 | .meteocons-sunrise:before { content: '\e815'; } /* '' */ 24 | .meteocons-sun:before { content: '\e816'; } /* '' */ 25 | .meteocons-moon:before { content: '\e817'; } /* '' */ 26 | .meteocons-eclipse:before { content: '\e818'; } /* '' */ 27 | .meteocons-mist:before { content: '\e819'; } /* '' */ 28 | .meteocons-wind:before { content: '\e81a'; } /* '' */ 29 | .meteocons-snowflake:before { content: '\e81b'; } /* '' */ 30 | .meteocons-cloud-sun:before { content: '\e81c'; } /* '' */ 31 | .meteocons-cloud-moon:before { content: '\e81d'; } /* '' */ 32 | .meteocons-fog-sun:before { content: '\e81e'; } /* '' */ 33 | .meteocons-fog-moon:before { content: '\e81f'; } /* '' */ 34 | .meteocons-fog-cloud:before { content: '\e820'; } /* '' */ 35 | .meteocons-fog:before { content: '\e821'; } /* '' */ 36 | .meteocons-cloud:before { content: '\e822'; } /* '' */ 37 | .meteocons-cloud-flash:before { content: '\e823'; } /* '' */ 38 | .meteocons-cloud-flash-alt:before { content: '\e824'; } /* '' */ 39 | .meteocons-drizzle:before { content: '\e825'; } /* '' */ 40 | .meteocons-rain:before { content: '\e826'; } /* '' */ 41 | .meteocons-windy:before { content: '\e827'; } /* '' */ 42 | .meteocons-windy-rain:before { content: '\e828'; } /* '' */ 43 | .meteocons-snow:before { content: '\e829'; } /* '' */ 44 | .meteocons-snow-alt:before { content: '\e82a'; } /* '' */ 45 | .meteocons-snow-heavy:before { content: '\e82b'; } /* '' */ 46 | .meteocons-hail:before { content: '\e82c'; } /* '' */ 47 | .meteocons-clouds:before { content: '\e82d'; } /* '' */ 48 | .meteocons-clouds-flash:before { content: '\e82e'; } /* '' */ -------------------------------------------------------------------------------- /main/static/css/fonts/meteocons/font/meteocons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/css/fonts/meteocons/font/meteocons.eot -------------------------------------------------------------------------------- /main/static/css/fonts/meteocons/font/meteocons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/css/fonts/meteocons/font/meteocons.ttf -------------------------------------------------------------------------------- /main/static/css/fonts/meteocons/font/meteocons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/css/fonts/meteocons/font/meteocons.woff -------------------------------------------------------------------------------- /main/static/css/mybackend.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | .mynav:after{ 4 | content: ''; 5 | } 6 | 7 | .main-content{ 8 | background-color: rgb(167, 164, 164); 9 | } 10 | 11 | .clear_float{ 12 | overflow: hidden; 13 | } 14 | 15 | .mybtn{ 16 | width: 50%; 17 | padding-top: 10px; 18 | padding-bottom: 10px; 19 | bottom: 15px; 20 | position: absolute; 21 | } 22 | 23 | .no-pd{ 24 | padding: 0; 25 | } 26 | 27 | 28 | .panel-body p{ 29 | color: rgb(59, 58, 58); 30 | font-size: 15px; 31 | } 32 | 33 | a{ 34 | color: rgb(11, 161, 11); 35 | } 36 | 37 | a:hover{ 38 | color: rgb(38, 226, 38); 39 | } 40 | 41 | .my_cp{ 42 | height: 647px; 43 | } 44 | 45 | -------------------------------------------------------------------------------- /main/static/css/nav.css: -------------------------------------------------------------------------------- 1 | .box2 { 2 | height: 86px; 3 | cursor: pointer; 4 | border-radius: 4px; 5 | padding: 0px 30px 0px 30px; 6 | background-color: #fff; 7 | border-radius: 4px; 8 | border: 1px solid #e4ecf3; 9 | margin: 20px 0 0 0; 10 | -webkit-transition: all 0.3s ease; 11 | -moz-transition: all 0.3s ease; 12 | -o-transition: all 0.3s ease; 13 | transition: all 0.3s ease; 14 | } 15 | 16 | .box2:hover { 17 | transform: translateY(-6px); 18 | -webkit-transform: translateY(-6px); 19 | -moz-transform: translateY(-6px); 20 | box-shadow: 0 26px 40px -24px rgba(0, 36, 100, 0.3); 21 | -webkit-box-shadow: 0 26px 40px -24px rgba(0, 36, 100, 0.3); 22 | -moz-box-shadow: 0 26px 40px -24px rgba(0, 36, 100, 0.3); 23 | -webkit-transition: all 0.3s ease; 24 | -moz-transition: all 0.3s ease; 25 | -o-transition: all 0.3s ease; 26 | transition: all 0.3s ease; 27 | } 28 | 29 | .xe-comment-entry img { 30 | float: left; 31 | display: block; 32 | margin-right: 10px; 33 | } 34 | .xe-comment { 35 | transform: translateY(-50%); 36 | position: absolute; 37 | margin-left: 50px; 38 | top: 50%; 39 | } 40 | .xe-comment p { 41 | margin-bottom: 0px; 42 | margin-right: 15px; 43 | } 44 | .overflowClip_1 { 45 | overflow: hidden; 46 | text-overflow: ellipsis; 47 | display: -webkit-box; 48 | -webkit-line-clamp: 1; 49 | -webkit-box-orient: vertical; 50 | } 51 | .overflowClip_2 { 52 | overflow: hidden; 53 | text-overflow: ellipsis; 54 | display: -webkit-box; 55 | -webkit-line-clamp: 2; 56 | -webkit-box-orient: vertical; 57 | } 58 | 59 | 60 | .submit-tag{ 61 | margin-top: 50px; 62 | 63 | } 64 | 65 | .img-circle { 66 | padding: 7px 0; 67 | } -------------------------------------------------------------------------------- /main/static/images/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/add.png -------------------------------------------------------------------------------- /main/static/images/blogo-collapsed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/blogo-collapsed@2x.png -------------------------------------------------------------------------------- /main/static/images/blogo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/blogo@2x.png -------------------------------------------------------------------------------- /main/static/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/favicon.png -------------------------------------------------------------------------------- /main/static/images/flags/flag-cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/flags/flag-cn.png -------------------------------------------------------------------------------- /main/static/images/flags/flag-us.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/flags/flag-us.png -------------------------------------------------------------------------------- /main/static/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/icon.png -------------------------------------------------------------------------------- /main/static/images/logo-collapsed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logo-collapsed@2x.png -------------------------------------------------------------------------------- /main/static/images/logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logo@2x.png -------------------------------------------------------------------------------- /main/static/images/logo_dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logo_dark@2x.png -------------------------------------------------------------------------------- /main/static/images/logos/365PSD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/365PSD.png -------------------------------------------------------------------------------- /main/static/images/logos/36kr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/36kr.png -------------------------------------------------------------------------------- /main/static/images/logos/3dsmax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/3dsmax.png -------------------------------------------------------------------------------- /main/static/images/logos/500d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/500d.png -------------------------------------------------------------------------------- /main/static/images/logos/55mm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/55mm.png -------------------------------------------------------------------------------- /main/static/images/logos/90sheji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/90sheji.png -------------------------------------------------------------------------------- /main/static/images/logos/ADOBEXDCC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/ADOBEXDCC.png -------------------------------------------------------------------------------- /main/static/images/logos/AdobeAfterEffectsCC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/AdobeAfterEffectsCC.png -------------------------------------------------------------------------------- /main/static/images/logos/AdobeColorCC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/AdobeColorCC.png -------------------------------------------------------------------------------- /main/static/images/logos/AffinityDesigner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/AffinityDesigner.png -------------------------------------------------------------------------------- /main/static/images/logos/AirbnbDesign.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/AirbnbDesign.png -------------------------------------------------------------------------------- /main/static/images/logos/Android9patch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/Android9patch.png -------------------------------------------------------------------------------- /main/static/images/logos/AndroidNiceties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/AndroidNiceties.png -------------------------------------------------------------------------------- /main/static/images/logos/AwesomeSketchPlugins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/AwesomeSketchPlugins.png -------------------------------------------------------------------------------- /main/static/images/logos/BWG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/BWG.png -------------------------------------------------------------------------------- /main/static/images/logos/CSSDesignAwards.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/CSSDesignAwards.png -------------------------------------------------------------------------------- /main/static/images/logos/CollectUI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/CollectUI.png -------------------------------------------------------------------------------- /main/static/images/logos/Coolest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/Coolest.png -------------------------------------------------------------------------------- /main/static/images/logos/Designmodo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/Designmodo.png -------------------------------------------------------------------------------- /main/static/images/logos/Dunnnk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/Dunnnk.png -------------------------------------------------------------------------------- /main/static/images/logos/Ecommercefolio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/Ecommercefolio.png -------------------------------------------------------------------------------- /main/static/images/logos/Ezgif.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/Ezgif.png -------------------------------------------------------------------------------- /main/static/images/logos/FacebookDesign.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/FacebookDesign.png -------------------------------------------------------------------------------- /main/static/images/logos/FindIcons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/FindIcons.png -------------------------------------------------------------------------------- /main/static/images/logos/Fondertype.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/Fondertype.png -------------------------------------------------------------------------------- /main/static/images/logos/FontM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/FontM.png -------------------------------------------------------------------------------- /main/static/images/logos/Fribbble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/Fribbble.png -------------------------------------------------------------------------------- /main/static/images/logos/GoogleDesign.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/GoogleDesign.png -------------------------------------------------------------------------------- /main/static/images/logos/INDESIGN .png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/INDESIGN .png -------------------------------------------------------------------------------- /main/static/images/logos/IcoMoonApp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/IcoMoonApp.png -------------------------------------------------------------------------------- /main/static/images/logos/Iconfinder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/Iconfinder.png -------------------------------------------------------------------------------- /main/static/images/logos/Illustrator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/Illustrator.png -------------------------------------------------------------------------------- /main/static/images/logos/InstantLogoSearch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/InstantLogoSearch.png -------------------------------------------------------------------------------- /main/static/images/logos/JDC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/JDC.png -------------------------------------------------------------------------------- /main/static/images/logos/Lapa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/Lapa.png -------------------------------------------------------------------------------- /main/static/images/logos/Material_Design.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/Material_Design.png -------------------------------------------------------------------------------- /main/static/images/logos/Materialicons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/Materialicons.png -------------------------------------------------------------------------------- /main/static/images/logos/Medialoot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/Medialoot.png -------------------------------------------------------------------------------- /main/static/images/logos/MockupZone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/MockupZone.png -------------------------------------------------------------------------------- /main/static/images/logos/MuseCC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/MuseCC.png -------------------------------------------------------------------------------- /main/static/images/logos/MyFonts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/MyFonts.png -------------------------------------------------------------------------------- /main/static/images/logos/NEXT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/NEXT.png -------------------------------------------------------------------------------- /main/static/images/logos/OnlineWebFonts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/OnlineWebFonts.png -------------------------------------------------------------------------------- /main/static/images/logos/PhotoshopLady.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/PhotoshopLady.png -------------------------------------------------------------------------------- /main/static/images/logos/PrincipleRepo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/PrincipleRepo.png -------------------------------------------------------------------------------- /main/static/images/logos/Pttrns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/Pttrns.png -------------------------------------------------------------------------------- /main/static/images/logos/ReallyGoodUX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/ReallyGoodUX.png -------------------------------------------------------------------------------- /main/static/images/logos/SiteSee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/SiteSee.png -------------------------------------------------------------------------------- /main/static/images/logos/Sketch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/Sketch.png -------------------------------------------------------------------------------- /main/static/images/logos/SketchMeasure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/SketchMeasure.png -------------------------------------------------------------------------------- /main/static/images/logos/SplitShire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/SplitShire.png -------------------------------------------------------------------------------- /main/static/images/logos/StockSnap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/StockSnap.png -------------------------------------------------------------------------------- /main/static/images/logos/UICloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/UICloud.png -------------------------------------------------------------------------------- /main/static/images/logos/UrbanFonts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/UrbanFonts.png -------------------------------------------------------------------------------- /main/static/images/logos/WebInspiration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/WebInspiration.png -------------------------------------------------------------------------------- /main/static/images/logos/abstractfonts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/abstractfonts.png -------------------------------------------------------------------------------- /main/static/images/logos/albumarium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/albumarium.png -------------------------------------------------------------------------------- /main/static/images/logos/aliued.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/aliued.png -------------------------------------------------------------------------------- /main/static/images/logos/aliuedcn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/aliuedcn.png -------------------------------------------------------------------------------- /main/static/images/logos/aliyun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/aliyun.png -------------------------------------------------------------------------------- /main/static/images/logos/anyway.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/anyway.png -------------------------------------------------------------------------------- /main/static/images/logos/appinn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/appinn.png -------------------------------------------------------------------------------- /main/static/images/logos/awesome_design_systems.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/awesome_design_systems.png -------------------------------------------------------------------------------- /main/static/images/logos/awwwards.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/awwwards.png -------------------------------------------------------------------------------- /main/static/images/logos/behance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/behance.png -------------------------------------------------------------------------------- /main/static/images/logos/blender.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/blender.png -------------------------------------------------------------------------------- /main/static/images/logos/boxesandarrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/boxesandarrows.png -------------------------------------------------------------------------------- /main/static/images/logos/cdc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/cdc.png -------------------------------------------------------------------------------- /main/static/images/logos/chanpin100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/chanpin100.png -------------------------------------------------------------------------------- /main/static/images/logos/cinema4d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/cinema4d.png -------------------------------------------------------------------------------- /main/static/images/logos/colorhunt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/colorhunt.png -------------------------------------------------------------------------------- /main/static/images/logos/coolors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/coolors.png -------------------------------------------------------------------------------- /main/static/images/logos/csspeeper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/csspeeper.png -------------------------------------------------------------------------------- /main/static/images/logos/ctrip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/ctrip.png -------------------------------------------------------------------------------- /main/static/images/logos/dafont.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/dafont.png -------------------------------------------------------------------------------- /main/static/images/logos/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/default.png -------------------------------------------------------------------------------- /main/static/images/logos/designguidelines.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/designguidelines.png -------------------------------------------------------------------------------- /main/static/images/logos/designmunk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/designmunk.png -------------------------------------------------------------------------------- /main/static/images/logos/digitaling.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/digitaling.png -------------------------------------------------------------------------------- /main/static/images/logos/doyoudo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/doyoudo.png -------------------------------------------------------------------------------- /main/static/images/logos/dribbble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/dribbble.png -------------------------------------------------------------------------------- /main/static/images/logos/easyicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/easyicon.png -------------------------------------------------------------------------------- /main/static/images/logos/eico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/eico.png -------------------------------------------------------------------------------- /main/static/images/logos/euxbaidu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/euxbaidu.png -------------------------------------------------------------------------------- /main/static/images/logos/figma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/figma.png -------------------------------------------------------------------------------- /main/static/images/logos/flaticon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/flaticon.png -------------------------------------------------------------------------------- /main/static/images/logos/flatuicolorpicker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/flatuicolorpicker.png -------------------------------------------------------------------------------- /main/static/images/logos/flatuicolors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/flatuicolors.png -------------------------------------------------------------------------------- /main/static/images/logos/flinto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/flinto.png -------------------------------------------------------------------------------- /main/static/images/logos/fontawesomeicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/fontawesomeicon.png -------------------------------------------------------------------------------- /main/static/images/logos/fontex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/fontex.png -------------------------------------------------------------------------------- /main/static/images/logos/fonts2u.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/fonts2u.png -------------------------------------------------------------------------------- /main/static/images/logos/fontsquirrel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/fontsquirrel.png -------------------------------------------------------------------------------- /main/static/images/logos/forgraphictm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/forgraphictm.png -------------------------------------------------------------------------------- /main/static/images/logos/framer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/framer.png -------------------------------------------------------------------------------- /main/static/images/logos/freebiesbug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/freebiesbug.png -------------------------------------------------------------------------------- /main/static/images/logos/freebiesupply.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/freebiesupply.png -------------------------------------------------------------------------------- /main/static/images/logos/freenaturestock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/freenaturestock.png -------------------------------------------------------------------------------- /main/static/images/logos/freepik.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/freepik.png -------------------------------------------------------------------------------- /main/static/images/logos/fwa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/fwa.png -------------------------------------------------------------------------------- /main/static/images/logos/gaoding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/gaoding.png -------------------------------------------------------------------------------- /main/static/images/logos/google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/google.png -------------------------------------------------------------------------------- /main/static/images/logos/googlefont.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/googlefont.png -------------------------------------------------------------------------------- /main/static/images/logos/goqr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/goqr.png -------------------------------------------------------------------------------- /main/static/images/logos/grabient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/grabient.png -------------------------------------------------------------------------------- /main/static/images/logos/gradients.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/gradients.png -------------------------------------------------------------------------------- /main/static/images/logos/graphberry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/graphberry.png -------------------------------------------------------------------------------- /main/static/images/logos/gratisography.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/gratisography.png -------------------------------------------------------------------------------- /main/static/images/logos/gtn9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/gtn9.png -------------------------------------------------------------------------------- /main/static/images/logos/gulusucai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/gulusucai.png -------------------------------------------------------------------------------- /main/static/images/logos/hdwallpapers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/hdwallpapers.png -------------------------------------------------------------------------------- /main/static/images/logos/huaban.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/huaban.png -------------------------------------------------------------------------------- /main/static/images/logos/human_interface_guidelines.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/human_interface_guidelines.png -------------------------------------------------------------------------------- /main/static/images/logos/iconarchive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/iconarchive.png -------------------------------------------------------------------------------- /main/static/images/logos/iconfont.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/iconfont.png -------------------------------------------------------------------------------- /main/static/images/logos/iconmonstr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/iconmonstr.png -------------------------------------------------------------------------------- /main/static/images/logos/iconsfeed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/iconsfeed.png -------------------------------------------------------------------------------- /main/static/images/logos/imcreator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/imcreator.png -------------------------------------------------------------------------------- /main/static/images/logos/imooc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/imooc.png -------------------------------------------------------------------------------- /main/static/images/logos/insight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/insight.png -------------------------------------------------------------------------------- /main/static/images/logos/invisionapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/invisionapp.png -------------------------------------------------------------------------------- /main/static/images/logos/ionicons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/ionicons.png -------------------------------------------------------------------------------- /main/static/images/logos/iosicongallery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/iosicongallery.png -------------------------------------------------------------------------------- /main/static/images/logos/isorepublic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/isorepublic.png -------------------------------------------------------------------------------- /main/static/images/logos/isux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/isux.png -------------------------------------------------------------------------------- /main/static/images/logos/iyunying.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/iyunying.png -------------------------------------------------------------------------------- /main/static/images/logos/jeshoots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/jeshoots.png -------------------------------------------------------------------------------- /main/static/images/logos/khroma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/khroma.png -------------------------------------------------------------------------------- /main/static/images/logos/klart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/klart.png -------------------------------------------------------------------------------- /main/static/images/logos/lanrentuku.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/lanrentuku.png -------------------------------------------------------------------------------- /main/static/images/logos/leiphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/leiphone.png -------------------------------------------------------------------------------- /main/static/images/logos/librestock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/librestock.png -------------------------------------------------------------------------------- /main/static/images/logos/lieyunwang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/lieyunwang.png -------------------------------------------------------------------------------- /main/static/images/logos/lifeofpix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/lifeofpix.png -------------------------------------------------------------------------------- /main/static/images/logos/liqi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/liqi.png -------------------------------------------------------------------------------- /main/static/images/logos/littlebigdetails.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/littlebigdetails.png -------------------------------------------------------------------------------- /main/static/images/logos/losttype.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/losttype.png -------------------------------------------------------------------------------- /main/static/images/logos/lstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/lstore.png -------------------------------------------------------------------------------- /main/static/images/logos/magdeleine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/magdeleine.png -------------------------------------------------------------------------------- /main/static/images/logos/marvelapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/marvelapp.png -------------------------------------------------------------------------------- /main/static/images/logos/medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/medium.png -------------------------------------------------------------------------------- /main/static/images/logos/mmtstock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/mmtstock.png -------------------------------------------------------------------------------- /main/static/images/logos/mockupworld.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/mockupworld.png -------------------------------------------------------------------------------- /main/static/images/logos/mustsee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/mustsee.png -------------------------------------------------------------------------------- /main/static/images/logos/mxd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/mxd.png -------------------------------------------------------------------------------- /main/static/images/logos/myphotopack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/myphotopack.png -------------------------------------------------------------------------------- /main/static/images/logos/navnav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/navnav.png -------------------------------------------------------------------------------- /main/static/images/logos/negativespace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/negativespace.png -------------------------------------------------------------------------------- /main/static/images/logos/niaogebiji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/niaogebiji.png -------------------------------------------------------------------------------- /main/static/images/logos/niceui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/niceui.png -------------------------------------------------------------------------------- /main/static/images/logos/nipic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/nipic.png -------------------------------------------------------------------------------- /main/static/images/logos/nngroup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/nngroup.png -------------------------------------------------------------------------------- /main/static/images/logos/notaselfie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/notaselfie.png -------------------------------------------------------------------------------- /main/static/images/logos/officeplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/officeplus.png -------------------------------------------------------------------------------- /main/static/images/logos/pages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/pages.png -------------------------------------------------------------------------------- /main/static/images/logos/papers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/papers.png -------------------------------------------------------------------------------- /main/static/images/logos/photoshop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/photoshop.png -------------------------------------------------------------------------------- /main/static/images/logos/photoshopetiquette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/photoshopetiquette.png -------------------------------------------------------------------------------- /main/static/images/logos/pinterest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/pinterest.png -------------------------------------------------------------------------------- /main/static/images/logos/pixabay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/pixabay.png -------------------------------------------------------------------------------- /main/static/images/logos/pixeden.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/pixeden.png -------------------------------------------------------------------------------- /main/static/images/logos/pmcaff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/pmcaff.png -------------------------------------------------------------------------------- /main/static/images/logos/pptmind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/pptmind.png -------------------------------------------------------------------------------- /main/static/images/logos/pptplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/pptplus.png -------------------------------------------------------------------------------- /main/static/images/logos/principle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/principle.png -------------------------------------------------------------------------------- /main/static/images/logos/producthunt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/producthunt.png -------------------------------------------------------------------------------- /main/static/images/logos/protopie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/protopie.png -------------------------------------------------------------------------------- /main/static/images/logos/psefan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/psefan.png -------------------------------------------------------------------------------- /main/static/images/logos/publicdomainarchive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/publicdomainarchive.png -------------------------------------------------------------------------------- /main/static/images/logos/qianku.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/qianku.png -------------------------------------------------------------------------------- /main/static/images/logos/qiantu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/qiantu.png -------------------------------------------------------------------------------- /main/static/images/logos/reeoo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/reeoo.png -------------------------------------------------------------------------------- /main/static/images/logos/sccnn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/sccnn.png -------------------------------------------------------------------------------- /main/static/images/logos/screensizes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/screensizes.png -------------------------------------------------------------------------------- /main/static/images/logos/shejizhoukan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/shejizhoukan.png -------------------------------------------------------------------------------- /main/static/images/logos/sicangziti.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/sicangziti.png -------------------------------------------------------------------------------- /main/static/images/logos/simplelineicons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/simplelineicons.png -------------------------------------------------------------------------------- /main/static/images/logos/siteInspire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/siteInspire.png -------------------------------------------------------------------------------- /main/static/images/logos/sizzy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/sizzy.png -------------------------------------------------------------------------------- /main/static/images/logos/sketchIm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/sketchIm.png -------------------------------------------------------------------------------- /main/static/images/logos/sketchapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/sketchapp.png -------------------------------------------------------------------------------- /main/static/images/logos/sketchappsources.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/sketchappsources.png -------------------------------------------------------------------------------- /main/static/images/logos/sketchcasts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/sketchcasts.png -------------------------------------------------------------------------------- /main/static/images/logos/sketchcn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/sketchcn.png -------------------------------------------------------------------------------- /main/static/images/logos/sketchhunt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/sketchhunt.png -------------------------------------------------------------------------------- /main/static/images/logos/skitterphoto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/skitterphoto.png -------------------------------------------------------------------------------- /main/static/images/logos/smashingmagazine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/smashingmagazine.png -------------------------------------------------------------------------------- /main/static/images/logos/sousucai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/sousucai.png -------------------------------------------------------------------------------- /main/static/images/logos/ss-kexueshangwang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/ss-kexueshangwang.png -------------------------------------------------------------------------------- /main/static/images/logos/sspai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/sspai.png -------------------------------------------------------------------------------- /main/static/images/logos/stokpic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/stokpic.png -------------------------------------------------------------------------------- /main/static/images/logos/svgomg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/svgomg.png -------------------------------------------------------------------------------- /main/static/images/logos/tgideas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/tgideas.png -------------------------------------------------------------------------------- /main/static/images/logos/thedayscolor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/thedayscolor.png -------------------------------------------------------------------------------- /main/static/images/logos/thestocks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/thestocks.png -------------------------------------------------------------------------------- /main/static/images/logos/threed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/threed.png -------------------------------------------------------------------------------- /main/static/images/logos/tinypng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/tinypng.png -------------------------------------------------------------------------------- /main/static/images/logos/today.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/today.png -------------------------------------------------------------------------------- /main/static/images/logos/tretars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/tretars.png -------------------------------------------------------------------------------- /main/static/images/logos/trianglify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/trianglify.png -------------------------------------------------------------------------------- /main/static/images/logos/typekit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/typekit.png -------------------------------------------------------------------------------- /main/static/images/logos/uedbaidu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/uedbaidu.png -------------------------------------------------------------------------------- /main/static/images/logos/uedc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/uedc.png -------------------------------------------------------------------------------- /main/static/images/logos/ui8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/ui8.png -------------------------------------------------------------------------------- /main/static/images/logos/uicn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/uicn.png -------------------------------------------------------------------------------- /main/static/images/logos/uigradients.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/uigradients.png -------------------------------------------------------------------------------- /main/static/images/logos/uigreat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/uigreat.png -------------------------------------------------------------------------------- /main/static/images/logos/uikitme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/uikitme.png -------------------------------------------------------------------------------- /main/static/images/logos/uisdc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/uisdc.png -------------------------------------------------------------------------------- /main/static/images/logos/uiuigreat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/uiuigreat.png -------------------------------------------------------------------------------- /main/static/images/logos/unsplash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/unsplash.png -------------------------------------------------------------------------------- /main/static/images/logos/uplabs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/uplabs.png -------------------------------------------------------------------------------- /main/static/images/logos/usepanda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/usepanda.png -------------------------------------------------------------------------------- /main/static/images/logos/uxcoffee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/uxcoffee.png -------------------------------------------------------------------------------- /main/static/images/logos/uxdesignweekly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/uxdesignweekly.png -------------------------------------------------------------------------------- /main/static/images/logos/uxren.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/uxren.png -------------------------------------------------------------------------------- /main/static/images/logos/vanschneider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/vanschneider.png -------------------------------------------------------------------------------- /main/static/images/logos/viggoz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/viggoz.png -------------------------------------------------------------------------------- /main/static/images/logos/visualhunt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/visualhunt.png -------------------------------------------------------------------------------- /main/static/images/logos/wallhalla.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/wallhalla.png -------------------------------------------------------------------------------- /main/static/images/logos/wappalyzer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/wappalyzer.png -------------------------------------------------------------------------------- /main/static/images/logos/web_ui_tutorial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/web_ui_tutorial.png -------------------------------------------------------------------------------- /main/static/images/logos/webdesignledger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/webdesignledger.png -------------------------------------------------------------------------------- /main/static/images/logos/webgradients.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/webgradients.png -------------------------------------------------------------------------------- /main/static/images/logos/worldvectorlogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/worldvectorlogo.png -------------------------------------------------------------------------------- /main/static/images/logos/woshipm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/woshipm.png -------------------------------------------------------------------------------- /main/static/images/logos/wotu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/wotu.png -------------------------------------------------------------------------------- /main/static/images/logos/xituqu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/xituqu.png -------------------------------------------------------------------------------- /main/static/images/logos/xiyou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/xiyou.png -------------------------------------------------------------------------------- /main/static/images/logos/yineng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/yineng.png -------------------------------------------------------------------------------- /main/static/images/logos/youtube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/youtube.png -------------------------------------------------------------------------------- /main/static/images/logos/ypppt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/ypppt.png -------------------------------------------------------------------------------- /main/static/images/logos/yrucd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/yrucd.png -------------------------------------------------------------------------------- /main/static/images/logos/zaodula.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/zaodula.png -------------------------------------------------------------------------------- /main/static/images/logos/zcool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/zcool.png -------------------------------------------------------------------------------- /main/static/images/logos/zheshu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/zheshu.png -------------------------------------------------------------------------------- /main/static/images/logos/ziticangku.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/ziticangku.png -------------------------------------------------------------------------------- /main/static/images/logos/ziticq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/logos/ziticq.png -------------------------------------------------------------------------------- /main/static/images/preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/preview.gif -------------------------------------------------------------------------------- /main/static/images/qqgroup_webstack.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/qqgroup_webstack.jpg -------------------------------------------------------------------------------- /main/static/images/qqgroup_webstack2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/qqgroup_webstack2.jpg -------------------------------------------------------------------------------- /main/static/images/t.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/t.png -------------------------------------------------------------------------------- /main/static/images/t2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/t2.png -------------------------------------------------------------------------------- /main/static/images/test.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/test.jpg -------------------------------------------------------------------------------- /main/static/images/user-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/user-1.png -------------------------------------------------------------------------------- /main/static/images/user-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/user-2.png -------------------------------------------------------------------------------- /main/static/images/user-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/user-3.png -------------------------------------------------------------------------------- /main/static/images/user-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/user-4.png -------------------------------------------------------------------------------- /main/static/images/user-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/user-5.png -------------------------------------------------------------------------------- /main/static/images/webstack_banner_cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/webstack_banner_cn.png -------------------------------------------------------------------------------- /main/static/images/webstack_icon_producthunt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/webstack_icon_producthunt.png -------------------------------------------------------------------------------- /main/static/images/wechat_viggo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/wechat_viggo.jpg -------------------------------------------------------------------------------- /main/static/images/z.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/z.png -------------------------------------------------------------------------------- /main/static/images/zm-2-77.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/images/zm-2-77.png -------------------------------------------------------------------------------- /main/static/js/dropzone/images/spritemap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/js/dropzone/images/spritemap.png -------------------------------------------------------------------------------- /main/static/js/dropzone/images/spritemap@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/js/dropzone/images/spritemap@2x.png -------------------------------------------------------------------------------- /main/static/js/jquery.bootstrap-autohidingnavbar.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Bootstrap Auto-Hiding Navbar - v4.0.0 3 | * An extension for Bootstrap's fixed navbar which hides the navbar while the page is scrolling downwards and shows it the other way. The plugin is able to show/hide the navbar programmatically as well. 4 | * http://www.virtuosoft.eu/code/bootstrap-autohidingnavbar/ 5 | * 6 | * Made by István Ujj-Mészáros 7 | * Under Apache License v2.0 License 8 | */ 9 | 10 | !function(s,t,e,o){var n,h="autoHidingNavbar",a=s(t),r=s(e),i=null,u=null,l=70,f=0,d=null,c=a.height(),g=!0,m={disableAutohide:!1,showOnUpscroll:!0,showOnBottom:!0,hideOffset:"auto",animationDuration:200,navbarOffset:0};function p(t,e){this.element=s(t),this.settings=s.extend({},m,e),this._defaults=m,this._name=h,this.init()}function w(t){if(g){t.element.addClass("navbar-hidden").animate({top:-1*parseInt(t.element.css("height"),10)+t.settings.navbarOffset},{queue:!1,duration:t.settings.animationDuration});try{s(".dropdown.open .dropdown-toggle, .dropdown.show .dropdown-toggle",t.element).dropdown("toggle")}catch(t){}g=!1,t.element.trigger("hide.autoHidingNavbar")}}function O(t){g||(t.element.removeClass("navbar-hidden").animate({top:0},{queue:!1,duration:t.settings.animationDuration}),g=!0,t.element.trigger("show.autoHidingNavbar"))}function b(t){t.settings.disableAutohide||(f=(new Date).getTime(),function(t){var e=a.scrollTop(),i=e-d;if(d=e,i<0){if(g)return;(t.settings.showOnUpscroll||e<=n)&&O(t)}else if(0l?b(t):(clearTimeout(i),i=setTimeout(function(){b(t)},l))}),a.on("resize."+h,function(){clearTimeout(u),u=setTimeout(function(){c=a.height()},l)}),this.element},setDisableAutohide:function(t){return this.settings.disableAutohide=t,this.element},setShowOnUpscroll:function(t){return this.settings.showOnUpscroll=t,this.element},setShowOnBottom:function(t){return this.settings.showOnBottom=t,this.element},setHideOffset:function(t){return this.settings.hideOffset=t,this.element},setAnimationDuration:function(t){return this.settings.animationDuration=t,this.element},show:function(){return O(this),this.element},hide:function(){return w(this),this.element},destroy:function(){return r.off("."+h),a.off("."+h),O(this),s.data(this,"plugin_"+h,null),this.element}},s.fn[h]=function(e){var i,n=arguments;return e===o||"object"==typeof e?this.each(function(){s.data(this,"plugin_"+h)||s.data(this,"plugin_"+h,new p(this,e))}):"string"==typeof e&&"_"!==e[0]&&"init"!==e?(this.each(function(){var t=s.data(this,"plugin_"+h);t instanceof p&&"function"==typeof t[e]&&(i=t[e].apply(t,Array.prototype.slice.call(n,1)))}),i!==o?i:this):void 0}}(jQuery,window,document); -------------------------------------------------------------------------------- /main/static/js/jquery.cookie.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery Cookie Plugin v1.4.1 3 | * https://github.com/carhartl/jquery-cookie 4 | * 5 | * Copyright 2013 Klaus Hartl 6 | * Released under the MIT license 7 | */ 8 | (function (factory) { 9 | if (typeof define === 'function' && define.amd) { 10 | // AMD 11 | define(['jquery'], factory); 12 | } else if (typeof exports === 'object') { 13 | // CommonJS 14 | factory(require('jquery')); 15 | } else { 16 | // Browser globals 17 | factory(jQuery); 18 | } 19 | }(function ($) { 20 | 21 | var pluses = /\+/g; 22 | 23 | function encode(s) { 24 | return config.raw ? s : encodeURIComponent(s); 25 | } 26 | 27 | function decode(s) { 28 | return config.raw ? s : decodeURIComponent(s); 29 | } 30 | 31 | function stringifyCookieValue(value) { 32 | return encode(config.json ? JSON.stringify(value) : String(value)); 33 | } 34 | 35 | function parseCookieValue(s) { 36 | if (s.indexOf('"') === 0) { 37 | // This is a quoted cookie as according to RFC2068, unescape... 38 | s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); 39 | } 40 | 41 | try { 42 | // Replace server-side written pluses with spaces. 43 | // If we can't decode the cookie, ignore it, it's unusable. 44 | // If we can't parse the cookie, ignore it, it's unusable. 45 | s = decodeURIComponent(s.replace(pluses, ' ')); 46 | return config.json ? JSON.parse(s) : s; 47 | } catch(e) {} 48 | } 49 | 50 | function read(s, converter) { 51 | var value = config.raw ? s : parseCookieValue(s); 52 | return $.isFunction(converter) ? converter(value) : value; 53 | } 54 | 55 | var config = $.cookie = function (key, value, options) { 56 | 57 | // Write 58 | 59 | if (value !== undefined && !$.isFunction(value)) { 60 | options = $.extend({}, config.defaults, options); 61 | 62 | if (typeof options.expires === 'number') { 63 | var days = options.expires, t = options.expires = new Date(); 64 | t.setTime(+t + days * 864e+5); 65 | } 66 | 67 | return (document.cookie = [ 68 | encode(key), '=', stringifyCookieValue(value), 69 | options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE 70 | options.path ? '; path=' + options.path : '', 71 | options.domain ? '; domain=' + options.domain : '', 72 | options.secure ? '; secure' : '' 73 | ].join('')); 74 | } 75 | 76 | // Read 77 | 78 | var result = key ? undefined : {}; 79 | 80 | // To prevent the for loop in the first place assign an empty array 81 | // in case there are no cookies at all. Also prevents odd result when 82 | // calling $.cookie(). 83 | var cookies = document.cookie ? document.cookie.split('; ') : []; 84 | 85 | for (var i = 0, l = cookies.length; i < l; i++) { 86 | var parts = cookies[i].split('='); 87 | var name = decode(parts.shift()); 88 | var cookie = parts.join('='); 89 | 90 | if (key && key === name) { 91 | // If second argument (value) is a function it's a converter... 92 | result = read(cookie, value); 93 | break; 94 | } 95 | 96 | // Prevent storing a cookie that we couldn't decode. 97 | if (!key && (cookie = read(cookie)) !== undefined) { 98 | result[name] = cookie; 99 | } 100 | } 101 | 102 | return result; 103 | }; 104 | 105 | config.defaults = {}; 106 | 107 | $.removeCookie = function (key, options) { 108 | if ($.cookie(key) === undefined) { 109 | return false; 110 | } 111 | 112 | // Must not alter options, thus extending a fresh object... 113 | $.cookie(key, '', $.extend({}, options, { expires: -1 })); 114 | return !$.cookie(key); 115 | }; 116 | 117 | })); 118 | -------------------------------------------------------------------------------- /main/static/js/jquery.mousewheel.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery Mousewheel 3.1.13 3 | * Copyright OpenJS Foundation and other contributors 4 | */ 5 | !function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e:e(jQuery)}(function(u){var f,d,e=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],t="onwheel"in window.document||9<=window.document.documentMode?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],w=Array.prototype.slice;if(u.event.fixHooks)for(var i=e.length;i;)u.event.fixHooks[e[--i]]=u.event.mouseHooks;var c=u.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var e=t.length;e;)this.addEventListener(t[--e],n,!1);else this.onmousewheel=n;u.data(this,"mousewheel-line-height",c.getLineHeight(this)),u.data(this,"mousewheel-page-height",c.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var e=t.length;e;)this.removeEventListener(t[--e],n,!1);else this.onmousewheel=null;u.removeData(this,"mousewheel-line-height"),u.removeData(this,"mousewheel-page-height")},getLineHeight:function(e){var t=u(e),i=t["offsetParent"in u.fn?"offsetParent":"parent"]();return i.length||(i=u("body")),parseInt(i.css("fontSize"),10)||parseInt(t.css("fontSize"),10)||16},getPageHeight:function(e){return u(e).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};function n(e){var t,i=e||window.event,n=w.call(arguments,1),o=0,l=0,s=0;if((e=u.event.fix(i)).type="mousewheel","detail"in i&&(s=-1*i.detail),"wheelDelta"in i&&(s=i.wheelDelta),"wheelDeltaY"in i&&(s=i.wheelDeltaY),"wheelDeltaX"in i&&(l=-1*i.wheelDeltaX),"axis"in i&&i.axis===i.HORIZONTAL_AXIS&&(l=-1*s,s=0),o=0===s?l:s,"deltaY"in i&&(o=s=-1*i.deltaY),"deltaX"in i&&(l=i.deltaX,0===s&&(o=-1*l)),0!==s||0!==l){if(1===i.deltaMode){var a=u.data(this,"mousewheel-line-height");o*=a,s*=a,l*=a}else if(2===i.deltaMode){var h=u.data(this,"mousewheel-page-height");o*=h,s*=h,l*=h}if(t=Math.max(Math.abs(s),Math.abs(l)),(!d||t 0) { 49 | settings.page = nextPage; 50 | locked = false; 51 | } 52 | } 53 | $(window).scroll(function () { 54 | var scrollTop = $(window).scrollTop(); 55 | //elements height + elements top - (scrollbar top + browser window height) 56 | var offset = $(elements).offset().top + $(elements).height() - (scrollTop + winHeight); 57 | if (offset < settings.offset && !locked) { 58 | locked = true; 59 | settings.load(settings.page, unLock); 60 | } 61 | }); 62 | } 63 | })(jQuery, window); -------------------------------------------------------------------------------- /main/static/js/mine.js: -------------------------------------------------------------------------------- 1 | function changepic(){ 2 | var reads=new FileReader(); 3 | f=document.getElementById('up_img').files[0]; 4 | reads.readAsDataURL(f); 5 | reads.onload=function(e){ 6 | document.getElementById('show_blogs_ico').src=this.result; 7 | }; 8 | // $(".show-blogs") 9 | } 10 | 11 | // $(".topnav").autoHidingNavbar({ 12 | // // 配置参数 13 | // animationDuration=400 14 | // }); -------------------------------------------------------------------------------- /main/static/js/my_card.js: -------------------------------------------------------------------------------- 1 | $(function(){ 2 | 3 | $(".myblog-card").each(function(i, el) 4 | { 5 | var $el = $(el), 6 | $nav = $el.find('.my-nav a'), 7 | $status_list = $el.find('.xe-comment p'), 8 | index = $status_list.filter('.post_show').index(), 9 | auto_switch = attrDefault($el, 'auto-switch', 3), 10 | as_interval = 0; 11 | 12 | if(auto_switch > 0) 13 | { 14 | as_interval = setInterval(function() 15 | { 16 | goTo(1); 17 | 18 | }, auto_switch * 1000); 19 | 20 | $el.hover(function() 21 | { 22 | window.clearInterval(as_interval); 23 | }, 24 | function() 25 | { 26 | as_interval = setInterval(function() 27 | { 28 | goTo(1); 29 | 30 | }, auto_switch * 1000);; 31 | }); 32 | } 33 | 34 | function goTo(plus_one) 35 | { 36 | index = (index + plus_one) % $status_list.length; 37 | 38 | if(index < 0) 39 | index = $status_list.length - 1; 40 | 41 | var $to_hide = $status_list.filter('.post_show'), 42 | $to_show = $status_list.eq(index); 43 | 44 | $to_hide.removeClass('post_show'); 45 | $to_hide.css('display','none') 46 | $to_show.addClass('post_show').fadeTo(0,0).fadeTo(320,1); 47 | $to_show.css('display','block') 48 | } 49 | 50 | $nav.on('click', function(ev) 51 | { 52 | ev.preventDefault(); 53 | 54 | var plus_one = $(this).hasClass('xe-prev') ? -1 : 1; 55 | 56 | goTo(plus_one); 57 | }); 58 | }); 59 | }) -------------------------------------------------------------------------------- /main/static/js/resizeable.js: -------------------------------------------------------------------------------- 1 | /* 2 | This function will be called in the event when browser breakpoint changes 3 | */ 4 | 5 | var public_vars = public_vars || {}; 6 | 7 | jQuery.extend(public_vars, { 8 | 9 | breakpoints: { 10 | largescreen: [991, -1], 11 | tabletscreen: [768, 990], 12 | devicescreen: [420, 767], 13 | sdevicescreen: [0, 419] 14 | }, 15 | 16 | lastBreakpoint: null 17 | }); 18 | 19 | 20 | /* Main Function that will be called each time when the screen breakpoint changes */ 21 | function resizable(breakpoint) 22 | { 23 | var sb_with_animation; 24 | 25 | // Large Screen Specific Script 26 | if(is('largescreen')) 27 | { 28 | } 29 | 30 | 31 | // Tablet or larger screen 32 | if(ismdxl()) 33 | { 34 | } 35 | 36 | 37 | // Tablet Screen Specific Script 38 | if(is('tabletscreen')) 39 | { 40 | } 41 | 42 | 43 | // Tablet device screen 44 | if(is('tabletscreen')) 45 | { 46 | public_vars.$sidebarMenu.addClass('collapsed'); 47 | ps_destroy(); 48 | } 49 | 50 | 51 | // Tablet Screen Specific Script 52 | if(isxs()) 53 | { 54 | } 55 | 56 | 57 | // Trigger Event 58 | jQuery(window).trigger('xenon.resize'); 59 | } 60 | 61 | 62 | 63 | /* Functions */ 64 | 65 | // Get current breakpoint 66 | function get_current_breakpoint() 67 | { 68 | var width = jQuery(window).width(), 69 | breakpoints = public_vars.breakpoints; 70 | 71 | for(var breakpont_label in breakpoints) 72 | { 73 | var bp_arr = breakpoints[breakpont_label], 74 | min = bp_arr[0], 75 | max = bp_arr[1]; 76 | 77 | if(max == -1) 78 | max = width; 79 | 80 | if(min <= width && max >= width) 81 | { 82 | return breakpont_label; 83 | } 84 | } 85 | 86 | return null; 87 | } 88 | 89 | 90 | // Check current screen breakpoint 91 | function is(screen_label) 92 | { 93 | return get_current_breakpoint() == screen_label; 94 | } 95 | 96 | 97 | // Is xs device 98 | function isxs() 99 | { 100 | return is('devicescreen') || is('sdevicescreen'); 101 | } 102 | 103 | // Is md or xl 104 | function ismdxl() 105 | { 106 | return is('tabletscreen') || is('largescreen'); 107 | } 108 | 109 | 110 | // Trigger Resizable Function 111 | function trigger_resizable() 112 | { 113 | if(public_vars.lastBreakpoint != get_current_breakpoint()) 114 | { 115 | public_vars.lastBreakpoint = get_current_breakpoint(); 116 | resizable(public_vars.lastBreakpoint); 117 | } 118 | 119 | 120 | // Trigger Event (Repeated) 121 | jQuery(window).trigger('xenon.resized'); 122 | } -------------------------------------------------------------------------------- /main/static/js/toastr.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a(["jquery"],function(a){return function(){function b(a,b,c){return o({type:u.error,iconClass:p().iconClasses.error,message:a,optionsOverride:c,title:b})}function c(b,c){return b||(b=p()),r=a("#"+b.containerId),r.length?r:(c&&(r=l(b)),r)}function d(a,b,c){return o({type:u.info,iconClass:p().iconClasses.info,message:a,optionsOverride:c,title:b})}function e(a){s=a}function f(a,b,c){return o({type:u.success,iconClass:p().iconClasses.success,message:a,optionsOverride:c,title:b})}function g(a,b,c){return o({type:u.warning,iconClass:p().iconClasses.warning,message:a,optionsOverride:c,title:b})}function h(a){var b=p();r||c(b),k(a,b)||j(b)}function i(b){var d=p();return r||c(d),b&&0===a(":focus",b).length?void q(b):void(r.children().length&&r.remove())}function j(b){for(var c=r.children(),d=c.length-1;d>=0;d--)k(a(c[d]),b)}function k(b,c){return b&&0===a(":focus",b).length?(b[c.hideMethod]({duration:c.hideDuration,easing:c.hideEasing,complete:function(){q(b)}}),!0):!1}function l(b){return r=a("
").attr("id",b.containerId).addClass(b.positionClass).attr("aria-live","polite").attr("role","alert"),r.appendTo(a(b.target)),r}function m(){return{tapToDismiss:!0,toastClass:"toast",containerId:"toast-container",debug:!1,showMethod:"fadeIn",showDuration:300,showEasing:"swing",onShown:void 0,hideMethod:"fadeOut",hideDuration:1e3,hideEasing:"swing",onHidden:void 0,extendedTimeOut:1e3,iconClasses:{error:"toast-error",info:"toast-info",success:"toast-success",warning:"toast-warning"},iconClass:"toast-info",positionClass:"toast-top-right",timeOut:5e3,titleClass:"toast-title",messageClass:"toast-message",target:"body",closeHtml:"",newestOnTop:!0}}function n(a){s&&s(a)}function o(b){function d(b){return!a(":focus",j).length||b?j[g.hideMethod]({duration:g.hideDuration,easing:g.hideEasing,complete:function(){q(j),g.onHidden&&"hidden"!==o.state&&g.onHidden(),o.state="hidden",o.endTime=new Date,n(o)}}):void 0}function e(){(g.timeOut>0||g.extendedTimeOut>0)&&(i=setTimeout(d,g.extendedTimeOut))}function f(){clearTimeout(i),j.stop(!0,!0)[g.showMethod]({duration:g.showDuration,easing:g.showEasing})}var g=p(),h=b.iconClass||g.iconClass;"undefined"!=typeof b.optionsOverride&&(g=a.extend(g,b.optionsOverride),h=b.optionsOverride.iconClass||h),t++,r=c(g,!0);var i=null,j=a("
"),k=a("
"),l=a("
"),m=a(g.closeHtml),o={toastId:t,state:"visible",startTime:new Date,options:g,map:b};return b.iconClass&&j.addClass(g.toastClass).addClass(h),b.title&&(k.append(b.title).addClass(g.titleClass),j.append(k)),b.message&&(l.append(b.message).addClass(g.messageClass),j.append(l)),g.closeButton&&(m.addClass("toast-close-button").attr("role","button"),j.prepend(m)),j.hide(),g.newestOnTop?r.prepend(j):r.append(j),j[g.showMethod]({duration:g.showDuration,easing:g.showEasing,complete:g.onShown}),g.timeOut>0&&(i=setTimeout(d,g.timeOut)),j.hover(f,e),!g.onclick&&g.tapToDismiss&&j.click(d),g.closeButton&&m&&m.click(function(a){a.stopPropagation?a.stopPropagation():void 0!==a.cancelBubble&&a.cancelBubble!==!0&&(a.cancelBubble=!0),d(!0)}),g.onclick&&j.click(function(){g.onclick(),d()}),n(o),g.debug&&console&&console.log(o),j}function p(){return a.extend({},m(),v.options)}function q(a){r||(r=c()),a.is(":visible")||(a.remove(),a=null,0===r.children().length&&r.remove())}var r,s,t=0,u={error:"error",info:"info",success:"success",warning:"warning"},v={clear:h,remove:i,error:b,getContainer:c,info:d,options:{},subscribe:e,success:f,version:"2.0.3",warning:g};return v}()})}("function"==typeof define&&define.amd?define:function(a,b){"undefined"!=typeof module&&module.exports?module.exports=b(require("jquery")):window.toastr=b(window.jQuery)}); -------------------------------------------------------------------------------- /main/static/js/xenon-api.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Xenon API Functions 3 | * 4 | * Theme by: www.laborator.co 5 | **/ 6 | 7 | 8 | function rtl() // checks whether the content is in RTL mode 9 | { 10 | if(typeof window.isRTL == 'boolean') 11 | return window.isRTL; 12 | 13 | window.isRTL = jQuery("html").get(0).dir == 'rtl' ? true : false; 14 | 15 | return window.isRTL; 16 | } 17 | 18 | 19 | 20 | // Page Loader 21 | function show_loading_bar(options) 22 | { 23 | var defaults = { 24 | pct: 0, 25 | delay: 1.3, 26 | wait: 0, 27 | before: function(){}, 28 | finish: function(){}, 29 | resetOnEnd: true 30 | }; 31 | 32 | if(typeof options == 'object') 33 | defaults = jQuery.extend(defaults, options); 34 | else 35 | if(typeof options == 'number') 36 | defaults.pct = options; 37 | 38 | 39 | if(defaults.pct > 100) 40 | defaults.pct = 100; 41 | else 42 | if(defaults.pct < 0) 43 | defaults.pct = 0; 44 | 45 | var $ = jQuery, 46 | $loading_bar = $(".xenon-loading-bar"); 47 | 48 | if($loading_bar.length == 0) 49 | { 50 | $loading_bar = $('
'); 51 | public_vars.$body.append( $loading_bar ); 52 | } 53 | 54 | var $pct = $loading_bar.find('span'), 55 | current_pct = $pct.data('pct'), 56 | is_regress = current_pct > defaults.pct; 57 | 58 | 59 | defaults.before(current_pct); 60 | 61 | TweenMax.to($pct, defaults.delay, {css: {width: defaults.pct + '%'}, delay: defaults.wait, ease: is_regress ? Expo.easeOut : Expo.easeIn, 62 | onStart: function() 63 | { 64 | $loading_bar.removeClass('progress-is-hidden'); 65 | }, 66 | onComplete: function() 67 | { 68 | var pct = $pct.data('pct'); 69 | 70 | if(pct == 100 && defaults.resetOnEnd) 71 | { 72 | hide_loading_bar(); 73 | } 74 | 75 | defaults.finish(pct); 76 | }, 77 | onUpdate: function() 78 | { 79 | $pct.data('pct', parseInt($pct.get(0).style.width, 10)); 80 | }}); 81 | } 82 | 83 | function hide_loading_bar() 84 | { 85 | var $ = jQuery, 86 | $loading_bar = $(".xenon-loading-bar"), 87 | $pct = $loading_bar.find('span'); 88 | 89 | $loading_bar.addClass('progress-is-hidden'); 90 | $pct.width(0).data('pct', 0); 91 | } -------------------------------------------------------------------------------- /main/static/js/xenon-widgets.js: -------------------------------------------------------------------------------- 1 | ;(function($,window,undefined){"use strict";$(document).ready(function() {if($('.page-loading-overlay').length) {$(window).on('load',function() {setTimeout(setupWidgets,200);});} else {setupWidgets();}});var setupWidgets=function() {$("[data-from][data-to]").each(function(i,el) {var $el=$(el),sm=scrollMonitor.create(el);sm.fullyEnterViewport(function() {var opts={useEasing:attrDefault($el,'easing',true),useGrouping:attrDefault($el,'grouping',true),separator:attrDefault($el,'separator',','),decimal:attrDefault($el,'decimal','.'),prefix:attrDefault($el,'prefix',''),suffix:attrDefault($el,'suffix',''),},$count=attrDefault($el,'count','this')=='this'?$el:$el.find($el.data('count')),from=attrDefault($el,'from',0),to=attrDefault($el,'to',100),duration=attrDefault($el,'duration',2.5),delay=attrDefault($el,'delay',0),decimals=new String(to).match(/\.([0-9]+)/)?new String(to).match(/\.([0-9]+)$/)[1].length:0,counter=new countUp($count.get(0),from,to,decimals,duration,opts);setTimeout(function(){counter.start();},delay*1000);sm.destroy();});});$("[data-fill-from][data-fill-to]").each(function(i,el) {var $el=$(el),sm=scrollMonitor.create(el);sm.fullyEnterViewport(function() {var fill={current:null,from:attrDefault($el,'fill-from',0),to:attrDefault($el,'fill-to',100),property:attrDefault($el,'fill-property','width'),unit:attrDefault($el,'fill-unit','%'),},opts={current:fill.to,onUpdate:function(){$el.css(fill.property,fill.current+fill.unit);},delay:attrDefault($el,'delay',0),},easing=attrDefault($el,'fill-easing',true),duration=attrDefault($el,'fill-duration',2.5);if(easing) {opts.ease=Sine.easeOut;} fill.current=fill.from;TweenMax.to(fill,duration,opts);sm.destroy();});});$(".xe-todo-list").on('change','input[type="checkbox"]',function(ev) {var $cb=$(this),$li=$cb.closest('li');$li.removeClass('done');if($cb.is(':checked')) {$li.addClass('done');}});$(".xe-status-update").each(function(i,el) {var $el=$(el),$nav=$el.find('.xe-nav a'),$status_list=$el.find('.xe-body li'),index=$status_list.filter('.active').index(),auto_switch=attrDefault($el,'auto-switch',0),as_interval=0;if(auto_switch>0) {as_interval=setInterval(function() {goTo(1);},auto_switch*1000);$el.hover(function() {window.clearInterval(as_interval);},function() {as_interval=setInterval(function() {goTo(1);},auto_switch*1000);;});} function goTo(plus_one) {index=(index+plus_one)%$status_list.length;if(index<0) index=$status_list.length-1;var $to_hide=$status_list.filter('.active'),$to_show=$status_list.eq(index);$to_hide.removeClass('active');$to_show.addClass('active').fadeTo(0,0).fadeTo(320,1);} $nav.on('click',function(ev) {ev.preventDefault();var plus_one=$(this).hasClass('xe-prev')?-1:1;goTo(plus_one);});});}})(jQuery,window); -------------------------------------------------------------------------------- /main/static/webstack_logos.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/static/webstack_logos.sketch -------------------------------------------------------------------------------- /main/templates/__sidebar.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /main/templates/__smooth.js.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /main/templates/__topnav.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /main/templates/backsys/__nav.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /main/templates/backsys/__post.html: -------------------------------------------------------------------------------- 1 | 2 | {{id}} 3 | {{post.title}} 4 | {{post.digest[:30]}} 5 | {{post.url}} 6 | {{current_user.name}} 7 | 8 | 功能待开发 9 | 10 | -------------------------------------------------------------------------------- /main/templates/backsys/backbase.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Webstack.cc - Admin 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | {% block page %} 29 |
30 | 31 | {% block main_content %} 32 | 33 | {% endblock main_content %} 34 | 35 |
36 | {% endblock page %} 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | {% block myscript %} 52 | 53 | {% endblock myscript %} 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /main/templates/backsys/bflash.html: -------------------------------------------------------------------------------- 1 | {% for c,message in get_flashed_messages(with_categories=true) %} 2 | {% if c =="success" %} 3 |
4 | {{ message }} 5 | 6 |
7 | {% endif %} 8 | 9 | {% if c =="notice" %} 10 |
11 | {{ message }} 12 | 13 |
14 | {% endif %} 15 | 16 | {% if c =="error" %} 17 |
18 | {{ message }} 19 | 20 |
21 | {% endif %} 22 | 23 | {% if c =="message" %} 24 |
25 | {{ message }} 26 | 27 |
28 | {% endif %} 29 | 30 | {% endfor %} -------------------------------------------------------------------------------- /main/templates/backsys/developing.html: -------------------------------------------------------------------------------- 1 | {% extends '/backsys/backbase.html' %} 2 | 3 | {% block main_content %} 4 | 68 | 69 |
70 | {% include '/backsys/__nav.html' %} 71 | {% include 'backsys/bflash.html' %} 72 |
73 |
74 |

75 | 功能正在开发中 76 | Page Being Generated!

77 |

We are developing the page you were looking for!

78 |

You can contact one of our agents to help you!

79 |
80 |
81 | 82 | 83 | {% endblock main_content %} 84 | -------------------------------------------------------------------------------- /main/templates/backsys/login_email.html: -------------------------------------------------------------------------------- 1 | {% extends '/backsys/backbase.html' %} 2 | 3 | {% block bodyclass %}lockscreen-page{% endblock bodyclass %} 4 | 5 | {% block page %} 6 | 40 | 41 | {% endblock page %} -------------------------------------------------------------------------------- /main/templates/base.html: -------------------------------------------------------------------------------- 1 | {% extends 'underbase.html' %} 2 | 3 | 4 | {% block page_container %} 5 | 6 | {% include '__sidebar.html' %} 7 | 8 |
9 | 10 | {% include '__topnav.html' %} 11 | 12 | {% for c,message in get_flashed_messages(with_categories=true) %} 13 | {% if c =="success" %} 14 |
15 | {{ message }} 16 | 17 |
18 | {% endif %} 19 | 20 | {% if c =="notice" %} 21 |
22 | {{ message }} 23 | 24 |
25 | {% endif %} 26 | 27 | {% if c =="error" %} 28 |
29 | {{ message }} 30 | 31 |
32 | {% endif %} 33 | 34 | {% if c =="message" %} 35 |
36 | {{ message }} 37 | 38 |
39 | {% endif %} 40 | 41 | {% endfor %} 42 | 43 | {% block content %} 44 | 无内容 45 | {% endblock content %} 46 | 47 | 48 | {% block footer %} 49 | 65 | {% endblock footer %} 66 | 67 |
68 | 69 | {% endblock page_container %} 70 | 71 | 72 | {% block bottomscript %} 73 | 84 | 85 | {% endblock bottomscript %} 86 | 87 | 88 | {# 89 | 90 | 91 | 92 | #} 93 | -------------------------------------------------------------------------------- /main/templates/errors/404.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 |
5 |
6 |

7 | Error 404 8 | Page not found!

9 |

We did not find the page you were looking for!

10 |

You can search again or contact one of our agents to help you!

11 |
12 | {% endblock content %} 13 | -------------------------------------------------------------------------------- /main/templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block title %} 4 | MyBlog 5 | {% endblock title %} 6 | 7 | {% block content %} 8 | 13 | 14 | 15 | {% for categor in categors %} 16 |

{{ categor.name }} 17 |

18 | 19 | {% set n = categor.blogs.limit(pre_cate_limit).count() %} 20 | {% set j = pre_row_limit %} 21 | {% set col_width = 12/j %} 22 | 23 | {# 将列表分成n/j份,每份j个 #} 24 | {% for i in range(0,n,j) %} 25 |
26 | 27 | {% for blog in categor.blogs.slice(i,i+j).all() %} 28 |
29 | 30 | {% include '/sub/blog_card.html' %} 31 | 32 |
33 | {% endfor %} 34 | 35 |
36 | 37 | {% endfor %} 38 |
39 | {% endfor %} 40 | 41 | {% endblock content %} 42 | 43 | 44 | 45 | {% block bottomscript %} 46 | {{ super() }} 47 | {% set index = True %} 48 | {% include '__smooth.js.html' %} 49 | 50 | {% endblock bottomscript %} -------------------------------------------------------------------------------- /main/templates/macro/form.html: -------------------------------------------------------------------------------- 1 | {% macro render_field(field) %} 2 |
{{ field.label(class='control-label') }}
3 |
4 | {{ field(class='form-control',**kwargs)|safe }} 5 | 6 | {% if field.errors %} 7 |
    8 | {% for error in field.errors %} 9 |
  • {{ error }}

  • 10 | {% endfor %} 11 |
12 | {% endif %} 13 |
14 | {% endmacro %} 15 | 16 | 17 | {% macro render_back_field(field,place) %} 18 |
19 | {{field.label(class="col-sm-3 control-label")}} 20 |
21 | {{field(class="form-control",placeholder=place)}} 22 |
23 | 24 | {% if field.errors %} 25 |
    26 | {% for error in field.errors %} 27 |
  • {{ error }}

  • 28 | {% endfor %} 29 |
30 | {% endif %} 31 |
32 |
33 | {% endmacro %} -------------------------------------------------------------------------------- /main/templates/mail/crawl_complete.html: -------------------------------------------------------------------------------- 1 |

Dear {{ blog.name }},

2 |

3 | 您的文章已更新完成,请通过如下链接查看: 4 | 5 | 点击这里查看 6 | . 7 |

8 |

您也可以粘贴如下链接到浏览器地址栏进行查看

9 |

{{ url_for('postlist', _external=True) }}

10 |

Sincerely,

11 |

The MyBlog Team

-------------------------------------------------------------------------------- /main/templates/mail/crawl_complete.txt: -------------------------------------------------------------------------------- 1 | Dear {{ blog.name }}, 2 | 3 | 您的文章已更新完成,请通过如下链接查看: 4 | 5 | {{ url_for('postlist', _external=True) }} 6 | 7 | Sincerely, 8 | 9 | The Myblog Team -------------------------------------------------------------------------------- /main/templates/mail/login_blog.html: -------------------------------------------------------------------------------- 1 |

Dear {{ blog.name }},

2 |

3 | 请通过如下链接登录您的账户: 4 | 5 | 点击这里登录 6 | . 7 |

8 |

您也可以粘贴如下链接到浏览器地址栏进行登录

9 |

{{ url_for('login_blog', token=token, _external=True) }}

10 |

如果您没有登录MyBlog请忽略这条信息

11 |

Sincerely,

12 |

The MyBlog Team

-------------------------------------------------------------------------------- /main/templates/mail/login_blog.txt: -------------------------------------------------------------------------------- 1 | Dear {{ blog.name }}, 2 | 3 | 请通过如下链接登录您的账户: 4 | 5 | {{ url_for('login_blog', token=token, _external=True) }} 6 | 7 | 如果您没有登录MyBlog请忽略这条信息 8 | 9 | Sincerely, 10 | 11 | The Myblog Team -------------------------------------------------------------------------------- /main/templates/nestpage.html: -------------------------------------------------------------------------------- 1 | {% extends 'underbase.html' %} 2 | 3 | {% block title %}MyBlog - {{ title }}{% endblock %} 4 | 5 | {# 6 | {% block keywords %}{{ blog.name }},MyBlog,{{ blog.keyword }},博客收录,干货文章,个人博客,博客平台,优秀博客,博客大全,开发者,编程,代码,名人博客,生活博客{% endblock keywords %} 7 | 8 | {% block description %} 9 | {% if blog.about %} 10 | MyBlog - {{ blog.name }} - {{ blog.about }} 11 | {% else %} 12 | MyBlog - {{ blog.name }} - 收集国内外知名博客,优秀个人博客,采用高质量博客优先排序规则,记录分享你我 13 | {% endif %} 14 | {% endblock description %} 15 | #} 16 | 17 | {% block style %} 18 | 23 | {% endblock style %} 24 | 25 | {% block page_container %} 26 | 27 | {% set collapsed = True %} 28 | {% include '__sidebar.html' %} 29 | 30 | {% block content %} 31 | 32 | {% endblock content %} 33 | 34 | {% endblock page_container %} 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /main/templates/sub/about_author_card.html: -------------------------------------------------------------------------------- 1 | {% if display %} 2 | {% set main_about = "main_about" %} 3 | {% endif %} 4 | 5 | 6 |
7 | {% if about %} 8 | {{ about }} 9 | {% else %} 10 | 作者什么都没写 11 | {% endif %} 12 |
13 | 14 | 15 | {# 16 | 如果你对我的文章感兴趣,那么很可能你也对我平时的阅读感兴趣,以下是一些你可以参考或订阅的资源: 17 |
    18 |
  1. 我在豆瓣上的豆列列举了一些看过的好书:[只读经典]思维改变生活 | [只读经典]思考的技术与艺术 | 决策与判断 | 机器学习与人工智能书籍资源导引
  2. 19 |
20 | 我翻译的书: 21 |
    22 |
  1. 《Imperfect C++ 中文版》
  2. 23 |
  3. 《Exceptional C++ Style 中文版》
  4. 24 |
  5. 《修改代码的艺术》
  6. 25 |
26 | 我写的书: 27 |
    28 |
  1. 29 |
30 | 我的公号: 31 |
    32 |
  1. 33 |
34 | #} -------------------------------------------------------------------------------- /main/templates/sub/blog_card.html: -------------------------------------------------------------------------------- 1 | {% set open_blog = url_for('seeblog' ,blog_id=blog.id) %} 2 |
3 |
4 | 23 |
24 | 25 | {{ blog.name }} 26 | 27 | {# 注意这里需要将多出部分裁剪 #} 28 | {% set bposts = blog.posts.limit(5).all() %} 29 | {% for bpost in bposts %} 30 | {% if loop.index == 1 %} 31 |

{{ bpost.title }}

32 | {% else %} 33 |

{{bpost.title}}

34 | {% endif %} 35 | {% endfor %} 36 |
37 |
38 |
-------------------------------------------------------------------------------- /main/templates/sub/blog_card_backup.html: -------------------------------------------------------------------------------- 1 | {% set open_blog = url_for('seeblog' ,blog_id=blog.id) %} 2 |
3 |
4 | 5 | {% if blog.logo %} 6 | 7 | {% else %} 8 | 9 | {% endif %} 10 | 11 | 12 |
13 | 14 | {{ blog.name }} 15 | 16 | {# 注意这里需要将多出部分裁剪 #} 17 |

{{ blog.about }}

18 |
19 |
20 |
-------------------------------------------------------------------------------- /main/templates/sub/index_post_card.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 6 |
7 |
8 |
    9 |
  • 21 May 10 |

    Build your own Fake Twitter Post now! Check it out @ simitator.com #laborator #envato

    11 |
  • 12 |
  • 18 April 13 |

    Micro-finance clean water sustainable future Oxfam protect. Enabler meaningful work change-makers. 14 |

    15 |
  • 16 |
  • 08 March 17 |

    Fight against malnutrition Aga Khan Bloomberg, economic independence inspire breakthroughs benefit 18 | civil.

    19 |
  • 20 |
21 |
22 | 25 |
-------------------------------------------------------------------------------- /main/templates/sub/menu_li.html: -------------------------------------------------------------------------------- 1 |
  • 2 | 3 | 4 | {{ item.name }} 5 | {% if item.hot %} 6 | Hot 7 | {% endif %} 8 | 9 |
  • -------------------------------------------------------------------------------- /main/templates/sub/post_card.html: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |

    {{post.title}}

    4 |
    5 | 作者:{{post.blog.name}} 6 |
    7 |
    8 |
    9 |

    10 | {{post.digest}} 11 |

    12 |
    13 | 14 |
    -------------------------------------------------------------------------------- /main/templates/sub/temp.html: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |
    4 | 6 |
    7 |
    8 |
      9 |
    • 21 May 10 |

      Build your own Fake Twitter Post now! Check it out @ simitator.com #laborator #envato

      11 |
    • 12 |
    • 18 April 13 |

      Micro-finance clean water sustainable future Oxfam protect. Enabler meaningful work change-makers. 14 |

      15 |
    • 16 |
    • 08 March 17 |

      Fight against malnutrition Aga Khan Bloomberg, economic independence inspire breakthroughs benefit 18 | civil.

      19 |
    • 20 |
    21 |
    22 | 25 |
    -------------------------------------------------------------------------------- /main/tool.py: -------------------------------------------------------------------------------- 1 | import uuid,os 2 | 3 | def random_filename(filename): 4 | ext=os.path.splitext(filename)[1] 5 | new_filename=uuid.uuid4().hex+ext 6 | return new_filename 7 | 8 | def comma_replace(text): 9 | return text.replace(",",",") 10 | 11 | # if __name__=="__main__": 12 | # print(random_filename("test.s")) 13 | 14 | def deal_url_end(url): 15 | return url if url[-1]=="/" else url+"/" -------------------------------------------------------------------------------- /main/tools/__pycache__/make_fake_data.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/tools/__pycache__/make_fake_data.cpython-36.pyc -------------------------------------------------------------------------------- /main/tools/__pycache__/make_fake_data.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shitianfang/flask-blog-platform/a9f41db8bb6b0440078d23e27b76b37090ff9f2f/main/tools/__pycache__/make_fake_data.cpython-37.pyc -------------------------------------------------------------------------------- /main/tools/crawler/seekbetter.py: -------------------------------------------------------------------------------- 1 | from pyquery import PyQuery as pq 2 | import requests 3 | 4 | url="https://seekbetter.me/?sort=recommend&mode=blog&page=" 5 | # print(requests.get("https://seekbetter.me/forward/blog/81",verify=False).url) 6 | 7 | f=open("seekbetter.txt","w",encoding='UTF-8') 8 | 9 | # requests.packages.urllib3.disable_warnings() 10 | 11 | try: 12 | for i in range(1,11): 13 | url_page=url.replace("",str(i)) 14 | print(url_page) 15 | doc=pq(requests.get(url_page,verify=False).text) 16 | cards=doc(".cards-item").items() 17 | 18 | for card in cards: 19 | name=card(".blog_name").text() 20 | desc=card(".blog_desc").text() 21 | tag=card(".mb-2").text() 22 | resp=requests.get("https://seekbetter.me"+card(".d-block").attr.href,verify=False) 23 | print(resp.status_code) 24 | url=resp.url 25 | text="名称:"+name+"\n"+"描述:"+desc+"\n"+"标签:"+tag+"\n"+"链接:"+url+"\n\n\n" 26 | print(text) 27 | f.write(text) 28 | except BaseException as e: 29 | print(repr(e)) 30 | finally: 31 | print("完成") 32 | f.close() 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /main/tools/crawler/seekbetter.txt: -------------------------------------------------------------------------------- 1 | 名称:五分钟学算法 2 | 描述:致力于将算法讲清楚! 3 | 标签:算法 原创 程序员 编程 有趣 4 | 链接:https://www.cxyxiaowu.com 5 | 6 | 7 | 名称:格物致知 8 | 描述:Python / Go / MongoDB / Prometheus / CentOS / Docker / Kubernetes / 后端 / GTD 9 | 标签:后端 Go docker Prometheus kubernetes 10 | 链接:https://liqiang.io 11 | 12 | 13 | 名称:阮一峰的网络日志 14 | 描述: 15 | 标签:编程 科技 分享 教程 16 | 链接:http://www.ruanyifeng.com/home.html 17 | 18 | 19 | 名称:Freek Dev 20 | 描述: 21 | 标签:PHP Laravel Javascript 22 | 链接:https://freek.dev/ 23 | 24 | 25 | 名称:蓝卡 26 | 描述:美好科技生活方式 27 | 标签:科技 数码 软件 互联网 博客 28 | 链接:https://www.lanka.cn/ 29 | 30 | 31 | 名称:IOIOX 32 | 描述:基本专注群晖技巧教程 33 | 标签:群晖 NAS 34 | 链接:https://www.ioiox.com 35 | 36 | 37 | 名称:小财神的奋斗 38 | 描述:分享财务思维,普及管理会计知识,帮助财务人员成长! 39 | 标签:财务 管理 会计 职场 生活 40 | 链接:https://caisixiang.com 41 | 42 | 43 | 名称:SKYue 44 | 描述:和时间做朋友 45 | 标签:生活 互联网 电影 46 | 链接:https://www.skyue.com 47 | 48 | 49 | 名称:69伙伴 50 | 描述:技术是冷冰冰的,应该多看看世界 51 | 标签:技巧 技术 随想 52 | 链接:https://covermusic.cn 53 | 54 | 55 | 名称:张鑫旭 56 | 描述:鑫空间,鑫生活 57 | 标签:CSS JS 前端 58 | 链接:https://www.zhangxinxu.com/ 59 | 60 | 61 | 名称:Yiran's Blog 62 | 描述:Normal is boring 63 | 标签:linux kubernetes 运维 64 | 链接:https://zdyxry.github.io/ 65 | 66 | 67 | 名称:林小沐 68 | 描述: 69 | 标签:编程 随笔 70 | 链接:https://immmmm.com/ 71 | 72 | 73 | 名称:渚碧 74 | 描述:我欲种菜,亦植蔷薇 75 | 标签:生活 读书 76 | 链接:https://jubeny.com 77 | 78 | 79 | 名称:见字如面 80 | 描述:别再烦我,你别说话 81 | 标签:产品 生活 思考 82 | 链接:https://hiwannz.com 83 | 84 | 85 | 名称:Debug客栈 86 | 描述:做一个爱分享的程序猿 87 | 标签:PHP Laravel 编程 Algorithm 分享 88 | 链接:https://www.debuginn.cn 89 | 90 | 91 | 名称:掘墓人的小铲子 92 | 描述:记录生活,分享技术 93 | 标签:微信支付 94 | 链接:https://juemuren4449.com/ 95 | 96 | 97 | 名称:DIYGod 98 | 描述:写代码是热爱,写到世界充满爱! 99 | 标签:编程 二次元 技术 100 | 链接:https://diygod.me/ 101 | 102 | 103 | 名称:Lenix Blog 104 | 描述:记录-交流-Web开发知识分享 105 | 标签:PHP 前端 编程 技术 后端 106 | 链接:https://blog.p2hp.com/ 107 | 108 | 109 | 名称:云风的 BLOG 110 | 描述:思绪来得快去得也快,偶尔会在这里停留 111 | 标签:技术 读书 编程 112 | 链接:https://blog.codingnow.com/ 113 | 114 | 115 | 名称:Jason 116 | 描述:独立开发者,自由职业者 117 | 标签:编程 独立开发者 118 | 链接:https://atjason.com/ 119 | 120 | 121 | 名称:ZEEKLING 122 | 描述:Stay simple, stay naive. 123 | 标签:技术 生活 124 | 链接:https://www.zeekling.cn/ 125 | 126 | 127 | 名称:咕咚的个人博客 128 | 描述:求真求知,拥抱体系 129 | 标签:Android 日记 思考 130 | 链接:https://gudong.site 131 | 132 | 133 | 名称:石阶求上 134 | 描述:记录Linux运维工作和开发工作过程中的技术知识,整理生活的足迹,为了走的更远,走的更稳。 135 | 标签:系统运维 linux 136 | 链接:https://cn-blogs.cn/ 137 | 138 | 139 | 名称:土木坛子 140 | 描述:和光同尘,与时舒卷 141 | 标签:生活 感悟 经历 142 | 链接:https://tumutanzi.com/ 143 | 144 | 145 | -------------------------------------------------------------------------------- /main/tools/crawler/test.py: -------------------------------------------------------------------------------- 1 | from pyquery import PyQuery as pq 2 | import requests 3 | 4 | # print(requests.get("https://seekbetter.me/forward/blog/81",verify=False).url) 5 | 6 | # doc=pq("https://seekbetter.me/?sort=recommend&mode=blog&page=1") 7 | 8 | -------------------------------------------------------------------------------- /main/tools/get_post_list.py: -------------------------------------------------------------------------------- 1 | #当前问题 2 | #1,翻页到最后三种情况,一种是404状态(),一种是200正常但是无标题,一种是200正常但是有标题仍然显示最后一页 3 | 4 | from pyquery import PyQuery as pq 5 | import urllib,sys 6 | 7 | def get_article_list(url,page_rule,titles_selector,links_selector,page_second_num,encoding="utf-8"): 8 | 9 | #如果为空则文章不分页 10 | if page_rule: 11 | #预处理 12 | if "" not in page_rule: 13 | raise ValueError("不在翻页网址中") 14 | 15 | doc=pq(url,encoding=encoding) 16 | titles=[t.text() for t in doc(titles_selector).items()] 17 | links=[l.attr("href") for l in doc(links_selector).items()] 18 | 19 | if not titles: 20 | raise ValueError("未获取到文章标题") 21 | 22 | if not links: 23 | raise ValueError("未获取到文章链接") 24 | 25 | i=2 26 | last_cache=[] 27 | 28 | print("启动循环加载") 29 | 30 | try: 31 | while True: 32 | doc=pq(page_rule.replace("",str(i)),encoding=encoding) 33 | this_title=[t.text() for t in doc(titles_selector).items()] 34 | this_link=[l.attr("href") for l in doc(links_selector).items()] 35 | 36 | # print(this_title) 37 | 38 | if not this_title: 39 | print("未获取到标题") 40 | break 41 | 42 | if not this_link: 43 | print("未获取到链接") 44 | break 45 | 46 | if this_title==last_cache: 47 | print("两次得到相同标题") 48 | break 49 | 50 | last_cache=this_title 51 | 52 | titles.extend(this_title) 53 | links.extend(this_link) 54 | 55 | i+=1 56 | 57 | except urllib.error.HTTPError as e: 58 | print(repr(e)) 59 | 60 | 61 | article_zip=zip(titles,links) 62 | return article_zip 63 | 64 | 65 | def print_article_list(a_data): 66 | for t,l in a_data: 67 | print(t,l) 68 | 69 | 70 | 71 | 72 | 73 | if __name__=="__main__": 74 | data={ 75 | "url":"https://www.vinoca.org/", 76 | "page_rule":"https://www.vinoca.org/page//", 77 | "titles_selector":".content h2 a", 78 | "links_selector":".content h2 a", 79 | "page_second_num":"2" 80 | } 81 | 82 | try: 83 | print_article_list(get_article_list(**data)) 84 | except ValueError as e: 85 | print(repr(e)) 86 | except urllib.error.HTTPError as e: 87 | print(repr(e)) 88 | except: 89 | print("未知错误:", sys.exc_info()[0]) 90 | 91 | # try: 92 | # print(pq("http://www.yangxg.com/6")) 93 | # except urllib.error.HTTPError as e: 94 | # print(repr(e)) 95 | -------------------------------------------------------------------------------- /main/tools/make_fake_data.py: -------------------------------------------------------------------------------- 1 | from faker import Faker 2 | import click 3 | from main.start import app,db 4 | from main.models import Post 5 | 6 | 7 | fake=Faker('zh_CN') 8 | 9 | 10 | #使用 python -m flask make-post 11 | @app.cli.command() 12 | def make_post(): 13 | for i in range(50): 14 | db.session.add(Post( 15 | title=fake.text(max_nb_chars=16, ext_word_list=None), 16 | body=fake.text(max_nb_chars=200, ext_word_list=None), 17 | recommend=True, 18 | blog_id=6 19 | )) 20 | db.session.commit() 21 | 22 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | celery==4.4.6 2 | Flask_Login==0.5.0 3 | Flask_Avatars==0.2.2 4 | SQLAlchemy==1.3.9 5 | Flask==1.1.1 6 | WTForms==2.2.1 7 | pyquery==1.4.1 8 | Flask_Script==2.0.6 9 | alembic==1.4.0 10 | Flask_SQLAlchemy==2.4.1 11 | Faker==4.1.1 12 | Flask_CLI==0.4.0 13 | Flask_Migrate==2.5.3 14 | feedparser==5.2.1 15 | requests==2.22.0 16 | Click==7.0 17 | Flask_Mail==0.9.1 18 | Flask_WTF==0.14.3 19 | PyJWT==1.7.1 20 | redis 21 | -------------------------------------------------------------------------------- /run.py: -------------------------------------------------------------------------------- 1 | import sys,os 2 | 3 | sys.path.append(os.getcwd()) 4 | sys.path.append(os.getcwd()+"/main") 5 | # print("路径:",sys.path) 6 | from main.start import app 7 | 8 | app=app 9 | 10 | if __name__=="__main__": 11 | app.run(debug=True) -------------------------------------------------------------------------------- /supervisord.conf: -------------------------------------------------------------------------------- 1 | [program:celeryd] 2 | command=/home/flaskapp/cblog_venv/bin/celery -A main.start.celery worker -l info --concurrency=1 --pool=solo 3 | stdout_logfile=/home/flaskapp/celery/celeryd.log 4 | stderr_logfile=/home/flaskapp/celery/celeryd.log 5 | autostart=true 6 | autorestart=true 7 | startsecs=10 8 | 9 | [supervisord] -------------------------------------------------------------------------------- /uwsgi.ini: -------------------------------------------------------------------------------- 1 | [uwsgi] 2 | master = true 3 | processes = 1 4 | threads = 2 5 | chdir = /home/flaskapp 6 | wsgi-file= run.py 7 | http = 0.0.0.0:80 8 | logto = /home/flaskapp/logs/error.log 9 | chmod-socket = 660 10 | vacuum = true 11 | master = true 12 | max-requests = 1000 --------------------------------------------------------------------------------