官方社群在线客服官方频道防骗查询货币工具

2023年全球时尚电商品类报告

2024-10-08 01:37:57
news.like.tgnews.like.tgnews.like.tgnews.like.tg

LIKE.TG 成立于2020年,总部位于马来西亚,是首家汇集全球互联网产品,提供一站式软件产品解决方案的综合性品牌。唯一官方网站:www.like.tg

行业整体营收增长滞缓,变化率跌破至负值

时尚品类销售额占全球电子商务销售额 20%,目前已成为全球零售行业的主要品类之一。

截至 2022 年,时尚类的总销售额约为 8630 亿美元,超过一半的销售额来自服装这一细分类目,这一趋势在过去 10 年中也相对稳定。同时,配饰类和鞋类销售额各占时尚类销售总额的 25% 左右。

然而,2021 年至 2022 年期间,所有细分市场的销售额都出现了下降,收入增长率在 2021 年持续放缓,2022 年则暴跌至负数值。

不断上涨的能源价格、通货膨胀率以及近乎全球性的生活成本危机,以上因素共同作用并减缓了时尚类目线上销售额增长速度。好消息是,滞缓的增长情况普遍被视作疫情后的行业洗牌,同时疫情后的时尚类线上整体零售额依然远高于疫情前水平。

为了应对通货膨胀的压力,全球许多中央银行被迫提高利率,尝试着控制通货膨胀。借贷成本飙升,加上快速上涨的物价,导致多数品类的销售额都大幅下降。

基于时尚类的日常必需品属性,销售受到大环境显著的影响也在所难免,但也由于其属性,该品类比大多数品类的市场表现更具弹性,销售额有望在 2023 年出现反弹。

时尚品类供应链的复杂性体现在,厂家与商家需要根据市场需求生产符合流行趋势的服装,并需要在很短的时间内再进行分销,这种从生产端到销售终端的紧迫性往往也要求他们必须以最低的成本实现,从而让整个流程变得更具挑战性。

同时,许多时装产品常也以低价进入竞争极其激烈的市场,因此价格仍然是推动销量的关键驱动力。

此外,近年来受到疫情影响,许多消费者将购物习惯迁移至线上,从而让时尚品类的线上销量保持住增长态势。

尽管宏观经济对时尚行业产生了影响,但在过去的 5 年里,时尚品类的线上影响力仍在不断发酵。

就在疫情爆发前,全球约 25% 的时装销量源自线上渠道,2020 年疫情期间这一比例上涨至 36%。时尚类消费者的主体为年轻人,他们所选择的渠道也以移动端为主。2021 年至 2022 年期间,消费者从移动端购买时尚电子商务的比例,从 60.6% 上升到 61.3%,预计仍将持续处于上升态势。

在非洲和亚洲等发展中国家市场,移动端渠道已经成为大众购物的主要入口并推动着电商行业不断增长。

亚欧大陆稳住消费“主心骨”,非洲市场成萎缩“重灾区”

在全球时尚品类销售额下滑的市场中,最动荡的市场当属非洲,该地区市场在 2020 年实现了 59% 的最大收入增长后,随后在 2022 年也迎来了最大跌幅,暴跌 10.8%。

几乎所有地区的市场的销售额在 2022 年都出现了萎缩(美洲地区市场除外,销售额增长保持平稳),但非洲迄今为止受到的打击最为严重,这也是许多非洲国家严重依赖俄罗斯石油和天然气满足其能源需求所造成的结果。非洲国家虽然不在针对俄罗斯能源出口的制裁范围之内,但当地经济仍然受到了沉重打击,能源价格暴涨 14 倍。

这一经济打击对这些非洲国家人民的收入和消费能力的影响比其他地方更严重。例如,北美对俄罗斯石油和天然气的依赖程度要低得多,因此该地区 2022 年的时尚类电子商务销售额与 2021 年水平保持平齐。

与此同时,电子商务应用率最高的是欧洲地区,44% 的消费者通过电子商务渠道购买时尚品类产品,这一比例在 5 年前为 30%。相比之下,南美的互联网普及性较低,抵消了北美相当高的网络接入率和电子商务应用率,因而美洲整体的电商应用率水平相对较低。

然而,即使在欧洲这一高应用率地区,也存在次区域差异,德国、英国、比利时和奥地利的电子商务发展水平非常成熟,东欧和中欧国家则仍然落后,不过这一差距也正在迅速缩小,预计将在未来 5 年内有望追平。

亚洲的区域表现也相对类似,韩国是全球时尚电子商务水平最高的国家之一,电商渗透率达到 60%,领先于德国、比利时和奥地利等欧洲国家,但从收入的角度看,韩国的时尚电子商务水平落后于庞大的中国市场一个数量级——中国对时尚类电子商务的关注程度较低,但现有市场却很可观。

尽管同期欧洲、美洲和非洲的电子商务用户数量有所上升,但相比之下增长幅度要小得多,因为这些地区的消费者与实体零售的联系更为紧密。

然而,亚洲这一巨大市场的价值却低得多。亚洲每个用户的平均支出 5 年来几乎没有变化,远低于除非洲以外的所有其他地区。消费者人均消费最高的是澳大利亚和大洋洲,这更多地反映了该地区较高的生活成本,而非单纯是人们对时尚品类的网购热情。

随着全球经济压力的影响愈发凸显,2021 年至 2022 年期间,美国和欧洲的消费支出大幅减少。

亚洲 76% 的时尚品类线上收入来源自移动端渠道而非桌面端。除了日本和韩国这两个技术先进但规模相对较小的市场外,亚洲市场整体对于移动设备的应用率也在不断上升。

许多国家的电子商务出现了惊人的增长趋势,主要原因在于许多偏远城市的主流零售店和国际品牌服务基础配备较为不完善,而线上渠道则恰好填补了这一空白。

细分市场三大板块各具亮点

时尚品类中,服装这一细分类目的线上销售额占全球线上销售总额的 55%;鞋类的占比最小,仅占 14%;配饰类占比为 31%,涵盖了从帽子、围巾、包包、手表、珠宝、手套、眼镜等各类商品。

1、服装类:女装主体市场地位不变,服装销售额整体趋低

全球时尚线上市场的服装细分市场以女装为主,其收入水平几乎是男装的两倍。

奢侈品和儿童服装,虽然有着巨大的收入来源和详尽的细分市场,但收入只占 17%。虽然所有这些细分市场的收入自 2021 年以来一直在下降,但每个细分市场的收入比例多年来基本保持一致。

女性通常每年在服装上的支出约为 250 美元,男性为 202 美元。自 2020 年和 2021 年初的消费高峰期以来,服装支出数额急剧下降,2021 年至 2022 年期间,女装和男装的收入分别下降了 9.3% 和 8.9%。童装和奢侈品服装同期下降了 7%。

服装支出减少的直接原因在于,全球通货膨胀加剧以及随之而来的消费者信心下降。

2、鞋类:全球平均支出金额仅为 48 美元,户外鞋类杀出重围

鞋类细分市场中的纺织面料鞋类和皮革料鞋类这两大关键子细分市场的销售额下降幅度更为显著,2022 年下降了 12%,低于前几年约 20% 的增长率。

就像服装一样,这是全球经济艰难影响消费者信心和消费能力的结果。鞋类产品尤其容易受到影响,产品价格往往相对昂贵且更换周期比服装类更慢,这也反映在每个用户每年在各类鞋类上的总支出上,全球平均支出金额仅为 48 美元,远低于服装类支出。

相比而言,奢侈鞋类和运动鞋的收入增长下降较为缓和。2022 年唯一仍在增长的细分市场是包括专业户外鞋和运动鞋,这两种鞋的购买率相对保持稳定。

3、配饰类:高端产品销售额颇受冲击

眼镜这一细分市场在 2021 年和 2022 年的销售额下降幅度最大,降幅达到 10%,服装配件、手表和珠宝销售额在同一时期也出现下降趋势,各下降约 7%。

此外,高端产品也受到了来自大环境重压带来的可支配收入减少的影响,哪怕手表和珠宝向来是送礼和长期投资的主要商品,销售额也未见显著增长,而奢侈品皮具、箱包和其他配饰的销售却与此有些矛盾,产品收入持续增长。

45 岁时尚类消费者占比 40%,巴西市场跃升消费新阵地

2022 年 8 月,RetailX 对德国、法国、巴西、澳大利亚、美国和英国 16 岁以上的 1571 名时尚电子消费者进行了消费者调研,结果发现,如今时尚品类消费与电商并非年轻群体专属。事实上,年龄较大的群体才有轻微的优势:16 岁至 24 岁的年轻消费者占网上时尚消费者的 30% 左右;45 岁以上的占 40% 以上。

中等收入和高收入的消费者越来越倾向于在网上购买时尚类产品,占时尚品类线上消费者总数的 71%。

RetailX 消费者调研数据显示,77% 的人每月网购次数不止一次,38% 的人每周网购不止一次。44% 的受访者每月在网上购买时尚产品的花费在 12 美元到 120 美元。16% 的人每月在任何类别的网购金额超过 300 美元,而这一项的时尚类消费者人数占比则为 20%。

此外,调研数据也受到不同地区商品价格点的影响。例如,巴西的时尚类线上消费者越来越多地在线上渠道购买时尚品类,但他们的整体在线支出却很低。

数据显示,2020 年,巴西人均年度电子商务支出为 2618 巴西雷亚尔(约 540 美元),相当于每月约 50 美元,这使得巴西消费者在全球电子商务支出金额这一指标中处于较低水平。相比之下,欧洲消费者平均每月在网上花费 340 欧元(约 375 美元)。

对于 80% 的时尚消费者来说,网购拥有更多的产品选择和便捷性,只有 24% 的消费者认为评价具有价值,但这掩盖了评论在购物过程中发挥的实际作用。

Instagram 与 Facebook 受追捧,巴西社媒营销与线上广告接受度居高

近年来,谷歌搜索作为消费者寻找购物灵感的重要性地位开始下滑,并被 Instagram 和 Facebook 取代。

RetailX 提供的数据中,全球时尚电子消费者使用的线上搜索渠道如下:Instagram(52.4%)、Facebook(51.6%)、谷歌搜索(49.8%)、YouTube(41.2%)和 TikTok(28.1%)。

近乎 40% 的消费者表示,自己愿意购买社媒博主们推荐的产品,此外也有近一半的巴西消费者表示,他们很可能会根据博主的推荐进行购买。巴西无疑是颇受社媒平台影响的重要消费市场之一,由此构建起了一个由内容创作者推动发展的生态系统,也带动着时尚类产品的销量增长。

此外,线上广告的影响力也并不亚于社媒平台。全球大约 25% 的时尚类线上消费者在看到广告后会选择下单。线上广告也进一步放大了原先品牌通过传统广告建立起的市场熟悉度。

值得关注的是,45% 的巴西消费者表示,线上广告会让他们进行日常购买,另有 30% 的人表示自己受到线上广告的启发,从而每周都会进行网购。

跑通可持续性循环经济,植根新世代消费理念

数据显示,2013 年至 2022 年,全球时尚业中可持续发展比例已从 2.1% 上升至 4.3%,行业相关从业者们正在逐渐意识到可持续性发展的重要性。

其中,亚洲市场向可持续时尚的转变尤为显著。约 89% 的中国时尚消费者认为购买可持续时尚是“重要的”或“非常重要的”。

此外,86% 的越南消费者、71% 的印度尼西亚消费者以及 68% 的菲律宾和马来西亚消费者都表示他们购买过可持续时尚产品。

可持续性发展并不仅仅局限于产品生产本身。如今,越来越多的时尚类产品销售转向二手商品、再利用商品,甚至是旧衣服的修补和翻新。

“循环经济”模式目前已经产生了巨大的收入源。截至 2030 年,全球二手服装转售市场规模预计将达到 4760 亿美元。

42% 的欧洲 Z 世代和千禧一代时尚消费者表示,他们可能会购买二手时尚类产品,这一趋势在法国、德国和英国尤为明显,超过一半的消费者对购买二手时尚产品持开放态度,部分人已经开始践行自己的价值观。

因此和美国消费者一样,人们也开始拥抱 eBay 上的二手产品,平台也因此迎来一波新趋势所带来的增长点。

英美两国消费市场画像重点解析

英国消费者

2023 年 7 月,ConsumerX 对 500 名 16 岁至 79 岁的英国消费者发起了调研,其中 17% 的人住在乡村,36.8% 的人住在城镇,26.2% 的人生活在小城市,20% 的人生活在大城市。

英国消费者的网购频率:

. 4.2% 的人每天至少网购一次

. 33% 的人每周网购超过一次

. 46.8% 的人每月网购超过一次

. 12.2% 的人每三个月网购超过一次

. 3.8% 的人一年网购超过一次或更少

直接送货到家(45%)是英国消费者选择网上购物的主要原因,其次是更便宜的价格(40%)、节省时间(38%)、优惠折扣(32%)、更多的选择(29%)。

对于 51% 的英国消费者来说,时尚和服装是最受欢迎的线上品类之一,其余的品类则是化妆品及美容产品(40%)、家居用品(38%)、运动及休闲用品(38%)、消费电子产品(30%)、鲜花和礼品(28%)。

美国消费者

2023 年 7 月,ConsumerX 对 500 名 16 岁至 82 岁的美国消费者发起了调研,其中 14.4% 的人居住在乡村,31.4% 的人居住在城镇,28.6% 的人居住在小城市,25.6% 的人居住在大城市。

美国消费者的网购频率:

. 5% 的人每天至少网购一次

. 31% 的人每周网购超过一次

. 42% 的人每月网购超过一次

. 16% 的人每三个月网购超过一次

. 7% 的人一年网购超过一次或更少

直接送货到家(48%)是美国消费者选择网购的主要原因,其次是更便宜的价格(37%)、节省时间(36%),优惠(33.5%),更多的选择为 28.5%。

51% 的美国消费者经常选购的线上品类为时尚服装,化妆品和美容产品(42%)、电子消费品(40%)、家庭用品(35.5%)、爱好用品(31%)、运动和休闲类用品(30%)。

英美两国消费者的异同点分析

37% 的英国消费者和 42% 的美国消费者认为,紧跟时尚潮流是“重要”或“非常重要的”。

75% 的英国消费者倾向于购买他们知道或认可的品牌,而这一选项下的美国消费者占比则为 55%。

61% 的英国消费者每月花费在 130 美元以下,而在美国,这一比例为 53%,其中 27% 的人每月花费在 130 美元至 320 美元之间。

36% 的英国消费者和 35% 的美国消费者认为,成本是网购时尚类产品的首要驱动因素。

然而,在排名前三位的原因中,英国消费者比美国消费者更看重价格。可供选择的款式和产品质量是在这两个国家消费者网购时尚类产品的关键驱动力。

与此同时,制造业对环境的影响已经开始成为部分消费者网购时尚类产品的前三大驱动因素,行业对环境的影响仍在引起人们的关注。

根据 Retailx 的消费者数据显示,89% 的英国消费者表示,在网购时尚类产品时,从多个角度和不同光线条件下拍摄的照片是“重要”或“非常重要”的因素。而在美国,这一数字为 81%。

随着技术和带宽的改善,视频在展示时尚潮流和剪裁方面的作用也不容忽视。54% 的英国消费者认为视频“很重要”或“非常重要”。而在美国,这一数据为 44%。

进一步的分析数据显示,82% 的美国消费者认为线上 AR 试穿功能“很重要”或“非常重要”,英国消费者的这一比例为 81%。此外,该功能一定程度上也有助于减少退货率,为许多利润率非常低的时尚类线上零售商带来了可观的成本效益。

跟据 RetailX 的调查数据显示,88% 的英国和美国消费者在网上购买时装时认为送货时间“很重要”或“非常重要”。

28% 的英国消费者希望所有订单都能“快速送达”(美国消费者比例为 32%),而 53% 的人要求一半以上的订单都能“快速送达”(美国消费者比例为 51%)。

根据 RetailX 的消费者数据显示,43% 的英国和美国消费者每周接受超过一次时尚零售商的推送信息。17% 和 21% 的英国和美国消费者说他们从来不接受来自零售商的信息。

有趣的是,对于与时尚零售商共享个人数据以获得更有针对性的商品与优惠,72% 的英国时尚消费者和 77% 的美国时尚消费者对此感到“非常满意”。

与此同时,46% 的英国消费者希望看到有关产品和制造的透明信息,还有 31% 的消费者要求对这些声明进行独立验证。只有 11% 的消费者会在没有凭证的情况下相信公司的说法。

美国消费者的情况与之类似,49% 的人希望看到制造过程和产品信息的透明度,27% 的人希望看到独立验证声明,只有 8% 的消费者会在没有凭证的情况下相信公司的说法。


现在关注【LIKE.TG出海指南频道】【LIKE.TG生态链-全球资源互联社区】,即可免费领取【WhatsApp、LINE、Telegram、Twitter、ZALO云控】等获客工具试用、【住宅IP、号段筛选】等免费资源,机会难得,快来解锁更多资源,助力您的业务飞速成长!点击【联系客服】

本文由LIKE.TG编辑部转载自互联网并编辑,如有侵权影响,请联系官方客服,将为您妥善处理。

This article is republished from public internet and edited by the LIKE.TG editorial department. If there is any infringement, please contact our official customer service for proper handling.


科技论坛互联网论坛虚拟币论坛技术论坛科技峰会互联网峰会虚拟币峰会技术峰会社交媒体论坛世界互联网算力网络论坛数据论坛数据峰会网络论坛网络峰会战略论坛开放论坛全球论坛全球峰会发展论坛人工智能论坛程序员论坛
加入like.tg生态圈,即可获利、结识全球供应商、拥抱全球软件生态圈加入like.tg生态圈,即可获利、结识全球供应商、拥抱全球软件生态圈加入like.tg生态圈,即可获利、结识全球供应商、拥抱全球软件生态圈
全球峰会
Flarum搭建论坛详细教程
Flarum搭建论坛详细教程
1、关于Flarum程序完美支持军哥lnmp环境/宝塔等,下载程序上传到网站根目录并需要伪静态+fileinfo扩展。程序本地下载:FlarumChina-beta7.zipGithub下载地址:https://github.com/skywalker512/FlarumChinafileinfo拓展 需要支持php扩展fileinfo。 1、对于lnmp1.3默认没有支持。修改include/upgrade_php.sh这个文件,把其中的:--disable-fileinfo,全部替换:--enable-fileinfo,再执行./upgrade.sh升级php就行了。 2、对于宝塔,安装后,找到你的PHP程序,里面有扩展可以选择安装。2、centos安装LNMP支持flarun2 | 1 数据库安装代码语言:javascript复制sudo wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm yum -y install mysql57-community-release-el7-10.noarch.rpm yum -y install mysql-community-server systemctl start mysqld.service2 | 2 mysql5.7获取密码的方式代码语言:javascript复制sudo grep 'temporary password' /var/log/mysqld.log代码语言:javascript复制vi /etc/my.cnf代码语言:javascript复制#添加validate_password_policy配置 validate_password_policy=0 #关闭密码策略 validate_password = off修改root密码代码语言:javascript复制mysql -uroot -p密码代码语言:javascript复制set global validate_password_policy=0; set global validate_password_length=1; ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!'; grant all privileges on *.* to root@"%" identified by "new password"; flush privileges;代码语言:javascript复制systemctl restart mysql2 | 3 安装php7.2代码语言:javascript复制sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm yum install php72w-fpm php72w-cli php72w-curl php72w-dom php72w-gd php72w-json php72w-mbstring php72w-openssl php72w-pdo_mysql php72w-tokenizer php72w-zip -y代码语言:javascript复制vim /etc/php-fpm.d/www.conf代码语言:javascript复制#找到以下两处共四行代码并修改如下: user = nginx group = nginx listen.owner = nginx listen.group = nginx3、安装Flarum方法一:下载=即使用整合包https://github.com/skywalker512/FlarumChina/releases/tag/v0.1.0-beta.12方法二:composer拉取 (比较建议后面装插件都是用的composer)3 | 1 安装composer下载composer.phar, 如果是网络原因失败,多试几次代码语言:javascript复制curl -sS https://getcomposer.org/installer | php把composer.phar移动到环境下让其变成可执行:代码语言:javascript复制mv composer.phar /usr/local/bin/composer测试代码语言:javascript复制composer -v修改镜像地址代码语言:javascript复制composer config repo.packagist composer https://mirrors.aliyun.com/composer/3 | 2 安装ningx代码语言:javascript复制yum -y install nginx unzip进入wwwroot目录中使用composer命令来安装flarum:代码语言:javascript复制mkdir /var/www/flarum/ cd /var/www/flarum/代码语言:javascript复制composer create-project flarum/flarum . --stability=beta #不用使用管理员权限命令sudo。完毕后修改nginx中的默认配置文件:代码语言:javascript复制sudo vim /etc/nginx/nginx.conf代码语言:javascript复制#将server代码段下的所有代码都用#注释掉 #server { # listen 80 default_server; # listen [::]:80 default_server; # server_name _; # root /usr/share/nginx/html; # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # location / { # } # error_page 404 /404.html; # location = /40x.html { # } # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } #} #然后修改 server { listen 80; server_name your.website.url; root /var/www/flarum/public; index index.php index.html; #include /home/flarum/wwwroot/.nginx.conf; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location / { try_files $uri $uri/ /index.php?$query_string; } # The following directives are based on best practices from H5BP Nginx Server Configs # https://github.com/h5bp/server-configs-nginx # Expire rules for static content location ~* \.(?:manifest|appcache|html?|xml|json)$ { add_header Cache-Control "max-age=0"; } location ~* \.(?:rss|atom)$ { add_header Cache-Control "max-age=3600"; } location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|mp4|ogg|ogv|webm|htc)$ { add_header Cache-Control "max-age=2592000"; access_log off; } location ~* \.(?:css|js)$ { add_header Cache-Control "max-age=31536000"; access_log off; } location ~* \.(?:ttf|ttc|otf|eot|woff|woff2)$ { add_header Cache-Control "max-age=2592000"; access_log off; } # Gzip compression gzip on; gzip_comp_level 5; gzip_min_length 256; gzip_proxied any; gzip_vary on; gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy; }注意:因为Flarum遵守了最新的安全规范,其程序的运行目录其实是在public文件夹内。4、插件安装https://bbs.csur.fun/d/84-flarum5、虚拟机搭建买个虚拟机做网页,诸多限制,虚拟机服务商的提供的服务确实就两字“操蛋”。 为什么没有买云服务器?就两字 “没钱”!哈哈。 虚拟机的购买途径自寻,但是很多服务商真的很坑爹。 虚拟机要求php支持7.2以上mysql支持5.7以上能够支持更改网站跟目录6、更改网站根目录层级将 public 目录(包括 .htaccess)中的所有文件移动到 Flarum 根目录。然后编辑 .htaccess 取消第 9-14 行的注释,以保护敏感资源。 然后编辑 index.php 文件,更改以下行:代码语言:javascript复制$site = require './site.php';最后,在 site.php 更新路径,以反映新的目录结构:代码语言:javascript复制'base' => __DIR__, 'public' => __DIR__, 'storage' => __DIR__.'/storage',config.php 更新 url 路径代码语言:javascript复制'url' => 'https://xxx.com/community',不更改网站层级目录请根据你的虚拟主机面板的不同,将网站运行目录指向public文件夹。 如果您使用的是虚拟主机无法更改目录,请按照一下的方法进行设置 在根目录下新建一个名为 .htaccess的文件代码语言:javascript复制RewriteEngine on RewriteCond %{REQUEST_URI} !^/public/ RewriteRule ^(.*)$ /public/$1 [L]7、其他底部加统计代码语言:javascript复制vendor/flarum/core/views/app.blade.php去掉网络字体代码语言:javascript复制vendor/flarum/core/src/Http/WebApp/WebAppView.php伪静态设置Nginx的话在站点配置文件处添加下面一段话。代码语言:javascript复制location / { try_files $uri $uri/ /index.php?$query_string; } location /api { try_files $uri $uri/ /api.php?$query_string; } location /admin { try_files $uri $uri/ /admin.php?$query_string; } location /flarum { deny all; return 404; } location ~ .php$ { fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; }
一些关于网站推广问题合集。
一些关于网站推广问题合集。
网站怎么快速上权重?要让一个网站快速提高权重,需要实施以下一些有效的策略:提供高质量的内容:提供高质量、原创、有用的内容是最重要的。这可以吸引更多的用户访问,并增加用户留存时间,提高用户体验。同时,高质量的内容也会被其他网站引用和分享,这将有助于增加外部链接,提高网站的权重。内部链接优化:内部链接是指在网站内部不同页面之间的链接。通过优化内部链接结构,可以增加搜索引擎对网站的理解,提高网站权重。在内部链接时,要使用相关的关键字作为链接文本,而不是使用"点击这里"这样无意义的链接文本。外部链接建设:获取来自其他网站的高质量链接对于提高网站权重非常重要。可以通过主动进行友情链接、媒体报道、论坛发帖等方式增加外部链接。但是请注意,建立外部链接是需要花费时间和精力的,必须确保链接是高质量的、自然的,否则可能会适得其反。社交媒体推广:在社交媒体平台上建立专业的社交媒体账号,提供网站相关的信息、文章、图像、视频等,让更多的用户了解网站,增加网站的曝光度,进而增加网站权重。网站结构优化:优化网站结构可以帮助搜索引擎更好地抓取和理解网站内容,提高网站权重。可以通过优化网站的HTML代码结构、网站的目录结构、网站的图片和视频的优化等方式实现。需要注意的是,这些策略需要长期坚持和不断完善,才能够取得长期、稳定的效果。怎么养站?要养好一个网站,需要考虑以下几个方面:网站内容:一个网站需要有高质量、有价值的内容来吸引用户。内容可以是文字、图片、视频等形式,需要有足够的量和质量,同时需要及时更新。网站设计:网站的设计需要符合用户的视觉需求,界面简洁、易于操作、美观大方,同时需要考虑不同设备(如手机、平板、电脑)的适配。网站优化:通过搜索引擎优化(SEO)、网站性能优化(如减少页面加载时间)、提高用户体验(如减少广告干扰),来提高网站的流量和用户满意度。社交媒体:通过社交媒体来吸引用户,增加网站的曝光率和影响力,比如可以在微信公众号、微博、知乎等平台上发布内容,吸引用户关注。安全保护:确保网站的安全性,包括用户信息保护、反垃圾邮件、反病毒等安全措施。数据分析:通过数据分析工具,了解用户访问情况,优化网站的运营,提高用户满意度和转化率。综合考虑上述因素,不断更新和改进,就可以养好一个网站。网站怎么发外链有用?要使外链对你的网站有用,你需要遵循以下几个步骤:确定目标受众和内容:确定你要向哪些人推广内容,以及他们可能对哪些内容感兴趣。通过创建高质量的内容,吸引用户来阅读你的文章并点击你的链接。找到相关的网站:寻找与你的内容相关的网站,并联系网站所有者以获得一个外链。你可以通过搜索引擎、社交媒体、行业博客等方式来找到这些网站。站长百科网创建有价值的内容:创建有价值的内容可以吸引其他网站链接到你的网站。确保你的内容是高质量的,包含有用的信息,且易于阅读和分享。联系其他网站:直接联系其他网站的所有者,请求他们在他们的网站上添加你的链接。你可以通过电子邮件、社交媒体或其他渠道来联系他们。使用社交媒体:在社交媒体上分享你的内容,并鼓励其他用户分享你的文章。这样可以提高你的内容的曝光率,并吸引更多的用户来访问你的网站。需要注意的是,对于外链的数量和质量,搜索引擎有一定的要求,如果采用不当的方式获取外链,可能会对你的网站产生负面影响。因此,你需要遵守搜索引擎的规则,采用合法的方式获取外链,从而为你的网站带来更多的流量和排名提升。2023年建什么类型的网站有前景?2023年,移动端和云端应用程序将继续受到极大的关注,尤其是基于AI的应用程序。有预测认为,2023年将会出现大量的智能家居、自动驾驶、语音助手等应用,这些网站将具有更大的前景。收藏 | 0点赞 | 0打赏
红鲱鱼发布欧洲100佳创业企业名单
红鲱鱼发布欧洲100佳创业企业名单
红鲱鱼欧洲100佳创业企业评选活动上周在阿姆斯特丹结束,这次活动评出了欧洲100家最具潜力的创业企业。此次论坛讨论了2016年及未来几年欧洲创业者面临的前景。众多顶级投资人参与了讨论,指导创业企业如何吸引合适的投资机构。演讲嘉宾和听众都认为在欧洲融资仍然是主要挑战,这对于创业者来说尤其重要。论坛讨论结束,企业开始登台宣讲,评选标准和去年一样严格。参与评选的企业来自整个欧洲,从俄罗斯到法国到英国到德国。这100家最佳企业都是经过严格的层层筛选评出的,荣誉来之不易,也是众望所归。这些企业来自不同的领域,他们在欧洲以及全球市场的发展将备受瞩目,也会受到密切跟踪。 2016年欧洲100佳创业企业榜单公司行业国家12Return软件荷兰3megawatt GmbH清洁技术德国4th Office云技术英国6Tribes社交媒体英国Acast AB娱乐媒体瑞典Accellta Ltd生命科学/生物技术以色列Agiboo BV云技术荷兰agile42其他德国Anders Innovations网络/互联网芬兰Appentra Solutions软件西班牙arivis AG软件德国Beyond Sports虚拟技术荷兰Billage云技术西班牙Biovotion AG医疗设备瑞士BISEES INFORMATION SYSTEMS软件爱尔兰CARENITY社交媒体法国CloudEndure云技术以色列Compliance Risks专业服务爱尔兰Create Intelligence Ltd软件/分析英国Cree GmbH清洁技术奥地利CropX云技术以色列DCA (Data-Centric Alliance)大数据/存储俄罗斯Diviac AG互联网/网络瑞士EasyPark Group其他瑞典Educated Change Ltd娱乐媒体英国Enso Detego GmbH软件奥地利eSMART Technologies清洁技术瑞士EVRYTHNG云技术英国Fairsail云技术英国Featurespace其他英国FINALCAD软件法国GetIntent广告技术美国Grapeshot软件英国GuardSquare网络安全比利时HeadSense Medical医疗设备以色列HELLO STAGE娱乐媒体美国Herta Security网络安全西班牙High-Tech Bridge网络安全瑞士homePad Solutions互联网/网络瑞士ICS2大数据/存储以色列ID Finance银行/并购西班牙indoo.rs GmbH软件奥地利Kameleoon广告技术法国Keypasco网络安全瑞典KTH Event Agency清洁技术土耳其Lemon Way互联网/网络法国Leverate软件以色列LibraEsva Srl网络安全意大利MediSapiens Ltd生命科学/生物技术芬兰MeetApp AB移动技术瑞典Metafused Ltd广告技术英国moblin大数据/软件/广告技术以色列Mols Media BV软件荷兰MYMobile Security网络安全英国nestpick其他德国Nexthink软件瑞士OneSoon Limited软件英国Openhost, SL云技术西班牙Optimal Plus大数据/存储以色列OurCrowd风险资本/投资以色列Overleaf云技术英国P.I.Works电讯土耳其Padawan Ltd网络英国Parx Plastics BV清洁技术荷兰PleaseTech Ltd软件英国Polar OLED Ltd硬件英国Privatequity.biz互联网/网络以色列Productsup GmbH软件德国Pyreos Limited硬件英国Qosmos软件法国QUASARDB软件法国Radisens Diagnostics医疗设备爱尔兰rational motion清洁技术德国RedCloud Technologies软件英国Relay42云技术荷兰Roima Intelligence其他芬兰Securosys SA网络安全瑞士Sentiance软件比利时Shadow Technologies网络/互联网以色列Smoltek AB纳米技术瑞典Spideo软件法国Sportswik AB娱乐媒体dia瑞典Stratoscale虚拟技术以色列Takeaway.com B.V.网络/互联网荷兰Teamnet Group软件罗马尼亚The Nostrum Group Ltd软件英国TimeLog A/S软件丹麦Tinitell电讯瑞典TitanHQ网络安全爱尔兰Umbilical Design其他瑞典VATBOX云技术英国Venture Spirit云技术比利时VerseOne软件英国Visma Solutions Oy云技术芬兰Wax Digital Ltd云技术英国网络lib大数据/存储法国WeekCal BV移动技术荷兰Zapgocharger Ltd消费电子英国Zebra Medical Vision生命科学/生物技术以色列ZeroLight软件英国
科技论坛
Flarum搭建论坛详细教程
Flarum搭建论坛详细教程
1、关于Flarum程序完美支持军哥lnmp环境/宝塔等,下载程序上传到网站根目录并需要伪静态+fileinfo扩展。程序本地下载:FlarumChina-beta7.zipGithub下载地址:https://github.com/skywalker512/FlarumChinafileinfo拓展 需要支持php扩展fileinfo。 1、对于lnmp1.3默认没有支持。修改include/upgrade_php.sh这个文件,把其中的:--disable-fileinfo,全部替换:--enable-fileinfo,再执行./upgrade.sh升级php就行了。 2、对于宝塔,安装后,找到你的PHP程序,里面有扩展可以选择安装。2、centos安装LNMP支持flarun2 | 1 数据库安装代码语言:javascript复制sudo wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm yum -y install mysql57-community-release-el7-10.noarch.rpm yum -y install mysql-community-server systemctl start mysqld.service2 | 2 mysql5.7获取密码的方式代码语言:javascript复制sudo grep 'temporary password' /var/log/mysqld.log代码语言:javascript复制vi /etc/my.cnf代码语言:javascript复制#添加validate_password_policy配置 validate_password_policy=0 #关闭密码策略 validate_password = off修改root密码代码语言:javascript复制mysql -uroot -p密码代码语言:javascript复制set global validate_password_policy=0; set global validate_password_length=1; ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!'; grant all privileges on *.* to root@"%" identified by "new password"; flush privileges;代码语言:javascript复制systemctl restart mysql2 | 3 安装php7.2代码语言:javascript复制sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm yum install php72w-fpm php72w-cli php72w-curl php72w-dom php72w-gd php72w-json php72w-mbstring php72w-openssl php72w-pdo_mysql php72w-tokenizer php72w-zip -y代码语言:javascript复制vim /etc/php-fpm.d/www.conf代码语言:javascript复制#找到以下两处共四行代码并修改如下: user = nginx group = nginx listen.owner = nginx listen.group = nginx3、安装Flarum方法一:下载=即使用整合包https://github.com/skywalker512/FlarumChina/releases/tag/v0.1.0-beta.12方法二:composer拉取 (比较建议后面装插件都是用的composer)3 | 1 安装composer下载composer.phar, 如果是网络原因失败,多试几次代码语言:javascript复制curl -sS https://getcomposer.org/installer | php把composer.phar移动到环境下让其变成可执行:代码语言:javascript复制mv composer.phar /usr/local/bin/composer测试代码语言:javascript复制composer -v修改镜像地址代码语言:javascript复制composer config repo.packagist composer https://mirrors.aliyun.com/composer/3 | 2 安装ningx代码语言:javascript复制yum -y install nginx unzip进入wwwroot目录中使用composer命令来安装flarum:代码语言:javascript复制mkdir /var/www/flarum/ cd /var/www/flarum/代码语言:javascript复制composer create-project flarum/flarum . --stability=beta #不用使用管理员权限命令sudo。完毕后修改nginx中的默认配置文件:代码语言:javascript复制sudo vim /etc/nginx/nginx.conf代码语言:javascript复制#将server代码段下的所有代码都用#注释掉 #server { # listen 80 default_server; # listen [::]:80 default_server; # server_name _; # root /usr/share/nginx/html; # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # location / { # } # error_page 404 /404.html; # location = /40x.html { # } # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } #} #然后修改 server { listen 80; server_name your.website.url; root /var/www/flarum/public; index index.php index.html; #include /home/flarum/wwwroot/.nginx.conf; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location / { try_files $uri $uri/ /index.php?$query_string; } # The following directives are based on best practices from H5BP Nginx Server Configs # https://github.com/h5bp/server-configs-nginx # Expire rules for static content location ~* \.(?:manifest|appcache|html?|xml|json)$ { add_header Cache-Control "max-age=0"; } location ~* \.(?:rss|atom)$ { add_header Cache-Control "max-age=3600"; } location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|mp4|ogg|ogv|webm|htc)$ { add_header Cache-Control "max-age=2592000"; access_log off; } location ~* \.(?:css|js)$ { add_header Cache-Control "max-age=31536000"; access_log off; } location ~* \.(?:ttf|ttc|otf|eot|woff|woff2)$ { add_header Cache-Control "max-age=2592000"; access_log off; } # Gzip compression gzip on; gzip_comp_level 5; gzip_min_length 256; gzip_proxied any; gzip_vary on; gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy; }注意:因为Flarum遵守了最新的安全规范,其程序的运行目录其实是在public文件夹内。4、插件安装https://bbs.csur.fun/d/84-flarum5、虚拟机搭建买个虚拟机做网页,诸多限制,虚拟机服务商的提供的服务确实就两字“操蛋”。 为什么没有买云服务器?就两字 “没钱”!哈哈。 虚拟机的购买途径自寻,但是很多服务商真的很坑爹。 虚拟机要求php支持7.2以上mysql支持5.7以上能够支持更改网站跟目录6、更改网站根目录层级将 public 目录(包括 .htaccess)中的所有文件移动到 Flarum 根目录。然后编辑 .htaccess 取消第 9-14 行的注释,以保护敏感资源。 然后编辑 index.php 文件,更改以下行:代码语言:javascript复制$site = require './site.php';最后,在 site.php 更新路径,以反映新的目录结构:代码语言:javascript复制'base' => __DIR__, 'public' => __DIR__, 'storage' => __DIR__.'/storage',config.php 更新 url 路径代码语言:javascript复制'url' => 'https://xxx.com/community',不更改网站层级目录请根据你的虚拟主机面板的不同,将网站运行目录指向public文件夹。 如果您使用的是虚拟主机无法更改目录,请按照一下的方法进行设置 在根目录下新建一个名为 .htaccess的文件代码语言:javascript复制RewriteEngine on RewriteCond %{REQUEST_URI} !^/public/ RewriteRule ^(.*)$ /public/$1 [L]7、其他底部加统计代码语言:javascript复制vendor/flarum/core/views/app.blade.php去掉网络字体代码语言:javascript复制vendor/flarum/core/src/Http/WebApp/WebAppView.php伪静态设置Nginx的话在站点配置文件处添加下面一段话。代码语言:javascript复制location / { try_files $uri $uri/ /index.php?$query_string; } location /api { try_files $uri $uri/ /api.php?$query_string; } location /admin { try_files $uri $uri/ /admin.php?$query_string; } location /flarum { deny all; return 404; } location ~ .php$ { fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; }
一些关于网站推广问题合集。
一些关于网站推广问题合集。
网站怎么快速上权重?要让一个网站快速提高权重,需要实施以下一些有效的策略:提供高质量的内容:提供高质量、原创、有用的内容是最重要的。这可以吸引更多的用户访问,并增加用户留存时间,提高用户体验。同时,高质量的内容也会被其他网站引用和分享,这将有助于增加外部链接,提高网站的权重。内部链接优化:内部链接是指在网站内部不同页面之间的链接。通过优化内部链接结构,可以增加搜索引擎对网站的理解,提高网站权重。在内部链接时,要使用相关的关键字作为链接文本,而不是使用"点击这里"这样无意义的链接文本。外部链接建设:获取来自其他网站的高质量链接对于提高网站权重非常重要。可以通过主动进行友情链接、媒体报道、论坛发帖等方式增加外部链接。但是请注意,建立外部链接是需要花费时间和精力的,必须确保链接是高质量的、自然的,否则可能会适得其反。社交媒体推广:在社交媒体平台上建立专业的社交媒体账号,提供网站相关的信息、文章、图像、视频等,让更多的用户了解网站,增加网站的曝光度,进而增加网站权重。网站结构优化:优化网站结构可以帮助搜索引擎更好地抓取和理解网站内容,提高网站权重。可以通过优化网站的HTML代码结构、网站的目录结构、网站的图片和视频的优化等方式实现。需要注意的是,这些策略需要长期坚持和不断完善,才能够取得长期、稳定的效果。怎么养站?要养好一个网站,需要考虑以下几个方面:网站内容:一个网站需要有高质量、有价值的内容来吸引用户。内容可以是文字、图片、视频等形式,需要有足够的量和质量,同时需要及时更新。网站设计:网站的设计需要符合用户的视觉需求,界面简洁、易于操作、美观大方,同时需要考虑不同设备(如手机、平板、电脑)的适配。网站优化:通过搜索引擎优化(SEO)、网站性能优化(如减少页面加载时间)、提高用户体验(如减少广告干扰),来提高网站的流量和用户满意度。社交媒体:通过社交媒体来吸引用户,增加网站的曝光率和影响力,比如可以在微信公众号、微博、知乎等平台上发布内容,吸引用户关注。安全保护:确保网站的安全性,包括用户信息保护、反垃圾邮件、反病毒等安全措施。数据分析:通过数据分析工具,了解用户访问情况,优化网站的运营,提高用户满意度和转化率。综合考虑上述因素,不断更新和改进,就可以养好一个网站。网站怎么发外链有用?要使外链对你的网站有用,你需要遵循以下几个步骤:确定目标受众和内容:确定你要向哪些人推广内容,以及他们可能对哪些内容感兴趣。通过创建高质量的内容,吸引用户来阅读你的文章并点击你的链接。找到相关的网站:寻找与你的内容相关的网站,并联系网站所有者以获得一个外链。你可以通过搜索引擎、社交媒体、行业博客等方式来找到这些网站。站长百科网创建有价值的内容:创建有价值的内容可以吸引其他网站链接到你的网站。确保你的内容是高质量的,包含有用的信息,且易于阅读和分享。联系其他网站:直接联系其他网站的所有者,请求他们在他们的网站上添加你的链接。你可以通过电子邮件、社交媒体或其他渠道来联系他们。使用社交媒体:在社交媒体上分享你的内容,并鼓励其他用户分享你的文章。这样可以提高你的内容的曝光率,并吸引更多的用户来访问你的网站。需要注意的是,对于外链的数量和质量,搜索引擎有一定的要求,如果采用不当的方式获取外链,可能会对你的网站产生负面影响。因此,你需要遵守搜索引擎的规则,采用合法的方式获取外链,从而为你的网站带来更多的流量和排名提升。2023年建什么类型的网站有前景?2023年,移动端和云端应用程序将继续受到极大的关注,尤其是基于AI的应用程序。有预测认为,2023年将会出现大量的智能家居、自动驾驶、语音助手等应用,这些网站将具有更大的前景。收藏 | 0点赞 | 0打赏
红鲱鱼发布欧洲100佳创业企业名单
红鲱鱼发布欧洲100佳创业企业名单
红鲱鱼欧洲100佳创业企业评选活动上周在阿姆斯特丹结束,这次活动评出了欧洲100家最具潜力的创业企业。此次论坛讨论了2016年及未来几年欧洲创业者面临的前景。众多顶级投资人参与了讨论,指导创业企业如何吸引合适的投资机构。演讲嘉宾和听众都认为在欧洲融资仍然是主要挑战,这对于创业者来说尤其重要。论坛讨论结束,企业开始登台宣讲,评选标准和去年一样严格。参与评选的企业来自整个欧洲,从俄罗斯到法国到英国到德国。这100家最佳企业都是经过严格的层层筛选评出的,荣誉来之不易,也是众望所归。这些企业来自不同的领域,他们在欧洲以及全球市场的发展将备受瞩目,也会受到密切跟踪。 2016年欧洲100佳创业企业榜单公司行业国家12Return软件荷兰3megawatt GmbH清洁技术德国4th Office云技术英国6Tribes社交媒体英国Acast AB娱乐媒体瑞典Accellta Ltd生命科学/生物技术以色列Agiboo BV云技术荷兰agile42其他德国Anders Innovations网络/互联网芬兰Appentra Solutions软件西班牙arivis AG软件德国Beyond Sports虚拟技术荷兰Billage云技术西班牙Biovotion AG医疗设备瑞士BISEES INFORMATION SYSTEMS软件爱尔兰CARENITY社交媒体法国CloudEndure云技术以色列Compliance Risks专业服务爱尔兰Create Intelligence Ltd软件/分析英国Cree GmbH清洁技术奥地利CropX云技术以色列DCA (Data-Centric Alliance)大数据/存储俄罗斯Diviac AG互联网/网络瑞士EasyPark Group其他瑞典Educated Change Ltd娱乐媒体英国Enso Detego GmbH软件奥地利eSMART Technologies清洁技术瑞士EVRYTHNG云技术英国Fairsail云技术英国Featurespace其他英国FINALCAD软件法国GetIntent广告技术美国Grapeshot软件英国GuardSquare网络安全比利时HeadSense Medical医疗设备以色列HELLO STAGE娱乐媒体美国Herta Security网络安全西班牙High-Tech Bridge网络安全瑞士homePad Solutions互联网/网络瑞士ICS2大数据/存储以色列ID Finance银行/并购西班牙indoo.rs GmbH软件奥地利Kameleoon广告技术法国Keypasco网络安全瑞典KTH Event Agency清洁技术土耳其Lemon Way互联网/网络法国Leverate软件以色列LibraEsva Srl网络安全意大利MediSapiens Ltd生命科学/生物技术芬兰MeetApp AB移动技术瑞典Metafused Ltd广告技术英国moblin大数据/软件/广告技术以色列Mols Media BV软件荷兰MYMobile Security网络安全英国nestpick其他德国Nexthink软件瑞士OneSoon Limited软件英国Openhost, SL云技术西班牙Optimal Plus大数据/存储以色列OurCrowd风险资本/投资以色列Overleaf云技术英国P.I.Works电讯土耳其Padawan Ltd网络英国Parx Plastics BV清洁技术荷兰PleaseTech Ltd软件英国Polar OLED Ltd硬件英国Privatequity.biz互联网/网络以色列Productsup GmbH软件德国Pyreos Limited硬件英国Qosmos软件法国QUASARDB软件法国Radisens Diagnostics医疗设备爱尔兰rational motion清洁技术德国RedCloud Technologies软件英国Relay42云技术荷兰Roima Intelligence其他芬兰Securosys SA网络安全瑞士Sentiance软件比利时Shadow Technologies网络/互联网以色列Smoltek AB纳米技术瑞典Spideo软件法国Sportswik AB娱乐媒体dia瑞典Stratoscale虚拟技术以色列Takeaway.com B.V.网络/互联网荷兰Teamnet Group软件罗马尼亚The Nostrum Group Ltd软件英国TimeLog A/S软件丹麦Tinitell电讯瑞典TitanHQ网络安全爱尔兰Umbilical Design其他瑞典VATBOX云技术英国Venture Spirit云技术比利时VerseOne软件英国Visma Solutions Oy云技术芬兰Wax Digital Ltd云技术英国网络lib大数据/存储法国WeekCal BV移动技术荷兰Zapgocharger Ltd消费电子英国Zebra Medical Vision生命科学/生物技术以色列ZeroLight软件英国
互联网论坛
BBS论坛(二十五)
BBS论坛(二十五)
25.1.发布帖子后台逻辑完成(1)apps/models.py代码语言:javascript复制class PostModel(db.Model): __tablename__ = 'post' id = db.Column(db.Integer, primary_key=True, autoincrement=True) title = db.Column(db.String(200), nullable=False) content = db.Column(db.Text, nullable=False) create_time = db.Column(db.DateTime, default=datetime.now) board_id = db.Column(db.Integer, db.ForeignKey('board.id')) board = db.relationship('BoardModel', backref='posts')(2)front/decorater.py代码语言:javascript复制from flask import session,redirect,url_for from functools import wraps import config def login_requried(func): @wraps(func) def wrapper(*args,**kwargs): if config.FRONT_USER_ID in session: return func(*args,**kwargs) else: return redirect(url_for('front.signin')) return wrapper(3)front/forms.py代码语言:javascript复制class AddPostForm(BaseForm): title=StringField(validators=[InputRequired(message='请输入标题')]) content=StringField(validators=[InputRequired(message='请输入内容')]) board_id=IntegerField(validators=[InputRequired(message='请选择版块')])(4)front/views.py代码语言:javascript复制@bp.route('/apost/', methods=['POST', 'GET']) @login_requried def apost(): if request.method == 'GET': boards = BoardModel.query.all() return render_template('front/front_apost.html', boards=boards) else: form = AddPostForm(request.form) if form.validate(): title = form.title.data content = form.content.data board_id = form.board_id.data board = BoardModel.query.get(board_id) if not board: return restful.params_error(message='没有这个版块') post = PostModel(title=title, content=content, board_id=board_id) post.board = board db.session.add(post) db.session.commit() return restful.success() else: return restful.params_error(message=form.get_error())25.2.发布帖子界面布局完成(1)把ueditor静态文件放到static目录下(2)apps目录下新建ueditor目录init.py代码语言:javascript复制from .ueditor import bpueditor.py代码语言:javascript复制#encoding: utf-8 from flask import ( Blueprint, request, jsonify, url_for, send_from_directory, current_app as app ) import json import re import string import time import hashlib import random import base64 import sys import os from urllib import parse # 更改工作目录。这么做的目的是七牛qiniu的sdk # 在设置缓存路径的时候默认会设置到C:/Windows/System32下面 # 会造成没有权限创建。 os.chdir(os.path.abspath(sys.path[0])) try: import qiniu except: pass from io import BytesIO bp = Blueprint('ueditor',__name__,url_prefix='/ueditor') UEDITOR_UPLOAD_PATH = "" UEDITOR_UPLOAD_TO_QINIU = False UEDITOR_QINIU_ACCESS_KEY = "" UEDITOR_QINIU_SECRET_KEY = "" UEDITOR_QINIU_BUCKET_NAME = "" UEDITOR_QINIU_DOMAIN = "" @bp.before_app_first_request def before_first_request(): global UEDITOR_UPLOAD_PATH global UEDITOR_UPLOAD_TO_QINIU global UEDITOR_QINIU_ACCESS_KEY global UEDITOR_QINIU_SECRET_KEY global UEDITOR_QINIU_BUCKET_NAME global UEDITOR_QINIU_DOMAIN UEDITOR_UPLOAD_PATH = app.config.get('UEDITOR_UPLOAD_PATH') if UEDITOR_UPLOAD_PATH and not os.path.exists(UEDITOR_UPLOAD_PATH): os.mkdir(UEDITOR_UPLOAD_PATH) UEDITOR_UPLOAD_TO_QINIU = app.config.get("UEDITOR_UPLOAD_TO_QINIU") if UEDITOR_UPLOAD_TO_QINIU: try: UEDITOR_QINIU_ACCESS_KEY = app.config["UEDITOR_QINIU_ACCESS_KEY"] UEDITOR_QINIU_SECRET_KEY = app.config["UEDITOR_QINIU_SECRET_KEY"] UEDITOR_QINIU_BUCKET_NAME = app.config["UEDITOR_QINIU_BUCKET_NAME"] UEDITOR_QINIU_DOMAIN = app.config["UEDITOR_QINIU_DOMAIN"] except Exception as e: option = e.args[0] raise RuntimeError('请在app.config中配置%s!'%option) csrf = app.extensions.get('csrf') if csrf: csrf.exempt(upload) def _random_filename(rawfilename): letters = string.ascii_letters random_filename = str(time.time()) + "".join(random.sample(letters,5)) filename = hashlib.md5(random_filename.encode('utf-8')).hexdigest() subffix = os.path.splitext(rawfilename)[-1] return filename + subffix @bp.route('/upload/',methods=['GET','POST']) def upload(): action = request.args.get('action') result = {} if action == 'config': config_path = os.path.join(bp.static_folder or app.static_folder,'ueditor','config.json') with open(config_path,'r',encoding='utf-8') as fp: result = json.loads(re.sub(r'\/\*.*\*\/','',fp.read())) elif action in ['uploadimage','uploadvideo','uploadfile']: image = request.files.get("upfile") filename = image.filename save_filename = _random_filename(filename) result = { 'state': '', 'url': '', 'title': '', 'original': '' } if UEDITOR_UPLOAD_TO_QINIU: if not sys.modules.get('qiniu'): raise RuntimeError('没有导入qiniu模块!') buffer = BytesIO() image.save(buffer) buffer.seek(0) q = qiniu.Auth(UEDITOR_QINIU_ACCESS_KEY, UEDITOR_QINIU_SECRET_KEY) token = q.upload_token(UEDITOR_QINIU_BUCKET_NAME) ret,info = qiniu.put_data(token,save_filename,buffer.read()) if info.ok: result['state'] = "SUCCESS" result['url'] = parse.urljoin(UEDITOR_QINIU_DOMAIN,ret['key']) result['title'] = ret['key'] result['original'] = ret['key'] else: image.save(os.path.join(UEDITOR_UPLOAD_PATH, save_filename)) result['state'] = "SUCCESS" result['url'] = url_for('ueditor.files',filename=save_filename) result['title'] = save_filename, result['original'] = image.filename elif action == 'uploadscrawl': base64data = request.form.get("upfile") img = base64.b64decode(base64data) filename = _random_filename('xx.png') filepath = os.path.join(UEDITOR_UPLOAD_PATH,filename) with open(filepath,'wb') as fp: fp.write(img) result = { "state": "SUCCESS", "url": url_for('files',filename=filename), "title": filename, "original": filename } return jsonify(result) @bp.route('/files/<filename>/') def files(filename): return send_from_directory(UEDITOR_UPLOAD_PATH,filename)(3)perfect_bbs.py代码语言:javascript复制from apps.ueditor import bp as ueditor_bp app.register_blueprint(ueditor_bp)(4)front/index.html代码语言:javascript复制<a class="btn btn-warning btn-block" href="{{ url_for('front.apost') }}" id="add-post-btn">发布帖子</a>(5)front/apost.html代码语言:javascript复制{% extends 'front/front_base.html' %} {% from 'common/_macros.html' import static %} {% block title %} 发布帖子 {% endblock %} {% block head %} <script src="{{ static('ueditor/ueditor.config.js') }}"></script> <script src="{{ static('ueditor/ueditor.all.min.js') }}"></script> <script src="{{ static('front/js/front_apost.js') }}"></script> {% endblock %} {% block body %} <form method="post"> <div class="form-group"> <div class="input-group"> <span class="input-group-addon">标题</span> <input type="text" name="title" class="form-control"> </div> </div> <div class="form-group"> <div class="input-group"> <span class="input-group-addon">版块</span> <select name="board_id" class="form-control"> {% for board in boards %} <option value="{{ board.id }}">{{ board.name }}</option> {% endfor %} </select> </div> </div> <div class="form-group"> <script id="ueditor" type="text/plain" style="height:500px;"></script> </div> <div class="form-group"> <button class="btn btn-danger" id="submit-btn">发布帖子</button> </div> </form> {% endblock %}(6)front/js/apost.js代码语言:javascript复制$(function () { var ue=UE.getEditor('ueditor',{'serverUrl':'/ueditor/upload/'}); });
加入like.tg生态圈,即可获利、结识全球供应商、拥抱全球软件生态圈加入like.tg生态圈,即可获利、结识全球供应商、拥抱全球软件生态圈加入like.tg生态圈,即可获利、结识全球供应商、拥抱全球软件生态圈