当前位置: 首页 > news >正文

商丘网站制作电话APP客户端网站建设

商丘网站制作电话,APP客户端网站建设,网页广告图,大良品牌网站建设感觉为了实现maui的效果。准备了一个后端及restful项目 #xff0c;如同想吃鱼就健个鲁塘一下#xff0c;但还是写一下吧。 fastapi_amis_admin 是一个功能强大的框架#xff0c;旨在帮助开发者在使用 FastAPI 进行 web 开发时#xff0c;能够快速创建一个高效且易于管理的… 感觉为了实现maui的效果。准备了一个后端及restful项目 如同想吃鱼就健个鲁塘一下但还是写一下吧。 fastapi_amis_admin 是一个功能强大的框架旨在帮助开发者在使用 FastAPI 进行 web 开发时能够快速创建一个高效且易于管理的后台界面。通过结合 FastAPI 和 amis 的优势fastapi_amis_admin 提供了一种简洁而高效的方式来构建和管理 web 应用程序的后台。 主要特性 高性能基于 FastAPI保证了高并发和快速响应的能力。 高效率通过 amis 实现快速构建可视化界面减少开发时间。 易于使用基于标准的 Python 类型提示简化开发流程。 开源免费遵循 Apache2.0 协议鼓励社区参与和贡献。 具体用法 安装 首先确保你的 Python 版本是 3.6 或更高。然后使用 pip 进行安装 bash pip install fastapi_amis_admin 2. 创建 FastAPI 应用 如果你还没有一个 FastAPI 项目可以先创建一个 python from fastapi import FastAPI app FastAPI() 3. 定义你的数据模型 例如如果你有一个用户模型 python from pydantic import BaseModel class User(BaseModel): id: int name: str email: str 4. 使用 fastapi_amis_admin 快速生成管理后台 python from fastapi_amis_admin import AdminSite, ModelAdmin from your_models import User # 引入你刚定义的数据模型 admin_site AdminSite(app) # 创建一个 AdminSite 实例 注册你的数据模型到 AdminSite 中 admin_site.register(ModelAdmin(User)) 5. 启动你的 FastAPI 应用 使用 UVicorn 或其他你喜欢的 ASGI 服务器来运行你的应用。例如使用 UVicorn bash uvicorn main:app --reload # ‘main’ 是你的主模块名‘app’ 是你的 FastAPI 实例名 6. 访问管理后台 默认情况下后台管理界面会在 /admin 路径下生成。你可以在浏览器中访问 http://localhost:8000/admin 来查看和使用管理后台。使用你定义的模型名称例如“User”作为菜单项来管理相应的数据。 pip install fastapi_amis_admin[cli] pip install pydantic[dotenv]# View help faa --help# Initialize a FastAPI-Amis-Admin project faa new music --init# Initialize a FastAPI-Amis-Admin application faa new music # Fast running project faa run再回顾 uvicorn0.18.3 pydantic[dotenv]1.9.0 aiosqlite0.17.0 fastapi-amis-admin0.5.0,0.6.0 fastapi-user-auth0.5.0,0.6.0 fastapi-scheduler0.0.6,0.1.0 aiomysql fastapi-config aioredis celery flower 在这里我们让项目支持redis 以及rabbitmq ##创建一个项目如下图 ##rabbitmq的配置 #!/usr/bin/python3 # !--*-- coding: utf-8 --*-- import timefrom celery import Celery from celery.utils.log import get_task_logger# 实例化 Celery celery Celery(tasks, brokeramqp://wanghaibin:wanghaibin127.0.0.1:5672//)# 创建 logger以显示日志信息 celery_log get_task_logger(__name__)# 创建任务函数以订单(Order) 为例异步进行 celery.task def create_order(name, quantity):# 5 seconds per 1 ordercomplete_time_per_item 5# Keep increasing depending on item quantity being orderedtime.sleep(complete_time_per_item * quantity)# 显示日志celery_log.info(fOrder Complete!)return {message: fHi {name}, Your order has completed!,order_quantity: quantity}#!/usr/bin/python3 #!--*-- coding: utf-8 --*-- from pydantic import BaseModel# Pydantic BaseModel # Order class model for request body class Order(BaseModel):customer_name: strorder_quantity: int##再看music models.py创建了表 from datetime import datetime from typing import List, Optional import sqlmodel from fastapi_amis_admin.amis.components import ColumnImage, InputImage, InputRichText from fastapi_amis_admin.models.enums import IntegerChoices from fastapi_amis_admin.models.fields import Field from fastapi_user_auth.auth.models import PkMixin, User from sqlalchemy import Column, String, select from sqlalchemy.orm import Sessionclass ArticleStatus(IntegerChoices):unpublished 0, 未发布published 1, 已发布inspection 2, 审核中disabled 3, 已禁用class Category(PkMixin, tableTrue):__tablename__ categoryname: str Field(title歌曲分类名, sa_columnColumn(String(100), uniqueTrue, indexTrue, nullableFalse))description: str Field(default, title描述, amis_form_itemtextarea)status: bool Field(False, title状态)articles: List[Article] sqlmodel.Relationship(back_populatescategory)class ArticleTagLink(sqlmodel.SQLModel, tableTrue):__tablename__ music_tagstag_id: Optional[int] Field(defaultNone, foreign_keytag.id, primary_keyTrue)music_id: Optional[int] Field(defaultNone, foreign_keyarticle.id, primary_keyTrue)class Tag(PkMixin, tableTrue):__tablename__ tagname: str Field(..., title标签名, sa_columnColumn(String(255), uniqueTrue, indexTrue, nullableFalse))articles: List[Article] sqlmodel.Relationship(back_populatestags, link_modelArticleTagLink)class Article(PkMixin, tableTrue):__tablename__ articletitle: str Field(title歌曲名, max_length200)img: str Field(None,title图片,max_length300,amis_form_itemInputImage(maxLength1, maxSize2 * 1024 * 1024, receiverpost:/admin/file/upload),amis_table_columnColumnImage(width100, height60, enlargeAbleTrue),)url: str Field(default, titlemp3 url, amis_form_itemtextarea)status: ArticleStatus Field(ArticleStatus.unpublished, titlestatus)content: str Field(..., title说明, amis_form_itemInputRichText())create_time: Optional[datetime] Field(default_factorydatetime.utcnow, title增加时间)source: str Field(default, title来源, max_length200)category_id: Optional[int] Field(defaultNone, foreign_keycategory.id, title分类)category: Optional[Category] sqlmodel.Relationship(back_populatesarticles)tags: List[Tag] sqlmodel.Relationship(back_populatesarticles, link_modelArticleTagLink)user_id: int Field(defaultNone, foreign_keyauth_user.id, title用户)user: User sqlmodel.Relationship()staticmethoddef check_update_permission(session: Session, user: User, item_id: List[str]):# 管理员可以修改全部文章, 并且可以批量修改.if user.has_requires(session, roles[admin]):return True# 非管理员,只能修改自己的文章,并且不可批量修改.if len(item_id) 1:return Falsestmt select(1).where(Article.id item_id[0], Article.user_id user.id)return bool(session.scalar(stmt)) admin.py表现的是菜单的链接 from datetime import datetime, timedelta from typing import Any, Dict, Listfrom apps.music.models import Article, Category, Tag from core.adminsite import site from fastapi_amis_admin import admin from fastapi_amis_admin.admin import AdminApp, PageSchemaAdmin from fastapi_amis_admin.amis.components import PageSchema, TableColumn from fastapi_amis_admin.crud.parser import LabelField, PropertyField from fastapi_amis_admin.crud.schema import Paginator from fastapi_amis_admin.models import Field from fastapi_user_auth.auth.models import User from pydantic import BaseModel from sqlmodel.sql.expression import Select from starlette.requests import Requestsite.register_admin class BlogApp(admin.AdminApp):page_schema PageSchema(label音乐管理, iconfa fa-calculator)router_prefix /musicdef __init__(self, app: AdminApp):super().__init__(app)self.register_admin(ArticleAdmin,CategoryAdmin, TagAdmin)class CategoryAdmin(admin.ModelAdmin):page_schema PageSchema(label音乐分类管理, iconfa fa-folder)model Categorysearch_fields [Category.name]class TagAdmin(admin.ModelAdmin):page_schema PageSchema(label音乐标签管理, iconfa fa-tags)model Tagsearch_fields [Tag.name]link_model_fields [Tag.articles]class ArticleAdmin(admin.ModelAdmin):page_schema PageSchema(label音乐管理, iconfa fa-file)model Article# 配置列表展示字段list_display [#TableColumn(typetpl, label自定义模板列, tpla href${source} target_blankID:${id},Title:${title}/a),Article.id,Article.title.label(歌名),Article.img,Category.name,User.username,Article.create_time,Article.url,User.nickname.label(昵称), # 重命名字段;也可以使用sqlalchemy函数, 例如:#func.count(*).label(music_count), #注意在get_select中修改对应的sql查询语句LabelField(User.nickname.label(nickname2),Field(默认用户, title发布者), # 通过Field配置Amis表格列信息,Amis表单字段信息.),]# 配置模糊搜索字段search_fields [Article.title, Category.name, User.username]# 配置关联模型link_model_fields [Article.tags]# 读取查看表单字段read_fields [Article,PropertyField(namecategory, type_Category),PropertyField(nameuser, type_User),PropertyField(nametags, type_List[Tag]),]# 自定义查询选择器async def get_select(self, request: Request) - Select:sel await super().get_select(request)return sel.join(Category, isouterTrue).join(User, isouterTrue)# 权限验证async def has_page_permission(self, request: Request, obj: PageSchemaAdmin None, action: str None) - bool:return Trueasync def has_list_permission(self, request: Request, paginator: Paginator, filters: BaseModel None, **kwargs) - bool:# 用户未登录,不可按标题过滤文章,并且最多每页最多只能查看10条数据.return bool(await self.site.auth.requires(responseFalse)(request) or (paginator.perPage 10 and filters.title ))async def has_create_permission(self, request: Request, data: BaseModel, **kwargs) - bool:# 用户已登录,并且注册时间大于3天,才可以发布文章return bool(await self.site.auth.requires(responseFalse)(request)and request.user.create_time datetime.now() - timedelta(days3)) or await self.site.auth.requires(rolesadmin, responseFalse)(request)async def has_delete_permission(self, request: Request, item_id: List[str], **kwargs) - bool:# 必须管理员才可以删除文章.return await self.site.auth.requires(rolesadmin, responseFalse)(request)async def has_update_permission(self, request: Request, item_id: List[str], data: BaseModel, **kwargs) - bool:if not await self.site.auth.requires(responseFalse)(request):return Falseif item_id is None:return Truereturn await self.site.db.async_run_sync(Article.check_update_permission, request.user, item_id)async def on_create_pre(self, request: Request, obj: BaseModel, **kwargs) - Dict[str, Any]:data await super().on_create_pre(request, obj, **kwargs)# 创建新文章时,设置当前用户为发布者data[user_id] request.user.idreturn data main.py代码 from starlette.responses import RedirectResponse from fastapi import FastAPI from core.adminsite import site from core.settings import settings from sqlmodel import SQLModel from aioredis import create_redis_pool, Redis from apps.rabbitmq.model import Order from apps.rabbitmq.celery_worker import create_order app FastAPI(debugsettings.debug) # 安装应用 from apps import admin admin.setup(app.router, site) # 安装应用blog from apps import music music.setup(app)from apps import siteconfig siteconfig.setup(app)# from apps import project # project.setup(app) # 挂载后台管理系统 site.mount_app(app)app.get(/) async def index():return RedirectResponse(urlsite.router_path)app.on_event(startup) async def startup():from core.adminsite import authawait site.db.async_run_sync(SQLModel.metadata.create_all, is_sessionFalse)await auth.create_role_user(admin)app.state.redis await get_redis_pool()from core.adminsite import schedulerscheduler.start()async def get_redis_pool() - Redis: #redisredis await create_redis_pool(fredis://:127.0.0.1:6379/0?encodingutf-8)return redisapp.on_event(shutdown) async def shutdown_event():app.state.redis.close()await app.state.redis.wait_closed()app.post(/order) def add_order(order: Order):create_order.delay(order.customer_name, order.order_quantity)return {message: Order Received! Thank you for your patience.} 这里还有一个core的目录。主要是解决数据据的配置 setting.py import os from pathlib import Path from typing import Listfrom fastapi_amis_admin.admin.settings import Settings as AmisSettingsBASE_DIR Path(__file__).resolve().parent.parentclass Settings(AmisSettings):name: str JJSOShost: str 127.0.0.1port: int 7555secret_key: str ssswessssallow_origins: List[str] Nonesettings Settings(_env_fileos.path.join(BASE_DIR, .env)) adminsite.py from core.settings import settings from fastapi_user_auth.site import AuthAdminSite site AuthAdminSite(settings) auth site.auth from fastapi_scheduler import SchedulerAdmin scheduler SchedulerAdmin.bind(site) 界面
http://www.hkea.cn/news/14513451/

相关文章:

  • 收费网站设计p2p网站制作流程
  • 专做品牌的网站游戏工作室怎么开
  • 南宁制作网站的公司企业网站成品源码
  • 网站文章在哪发布做seo桂林生活网二手房
  • 信息发布网站推广技巧网站开发设
  • 有什么网站可以免费做图个人想做外贸哪个平台比较好
  • 济南网络营销策划公司成都优化网站厂家
  • wordpress赞助插件福州短视频seo网站
  • 石家庄谁会搭建网站模板之家下载的模板怎么打开
  • 笔记本做网站网站建设 三网
  • 域名购买后 怎么创建网站免费的国际网站建设
  • 绍兴建站模板系统本地网站建设视频
  • 英文网站建设电话网上推广app怎么做
  • wordpress企业模版配置新网网站内部优化
  • 贸易公司网站设计腾讯云服务器优惠
  • 哈尔滨企业网站seo网站建设页面设计规格
  • 网站wordpress入侵网站首页改版费用
  • php 向网站发送数据建设是哪里的
  • 三门峡市建设局官方网站seo网站自动推广
  • 成都建设招标网站首页杭州网站建设hzfwwl
  • 什么网站可以推广广告做移动网站优化软件
  • 做网站学cdr吗上海官网网址
  • 天津网站建设制作开发公司wordpress xmlrpc api
  • 餐饮vi设计如何看网站是否优化
  • 南通公司网站建设东道设计地址
  • 广东网站建设免费京东商城网站建设教程
  • 建设项目管理公司网站郏县住房和城乡建设局网站
  • 旅游信息网站建设论文wordpress in_category
  • 建设网站好学吗企业如何做好网站运营管理
  • 商城网站建设建议优秀网站架构