商城网站建设咨询,在网站做的pdf有水印如何删除,杭州网站建设费用,网站建设的功能模型官方文档
封装思想
直接复制官网json数据即可开发每个json中的接口由fastapi 转发#xff08;透传#xff09;使其开发模式与前端思维一致
基础组件
from amis import Page, Service, App
from pydantic import BaseModel, Field
from fastapi import FastAPI, Request, …官方文档
封装思想
直接复制官网json数据即可开发每个json中的接口由fastapi 转发透传使其开发模式与前端思维一致
基础组件
from amis import Page, Service, App
from pydantic import BaseModel, Field
from fastapi import FastAPI, Request, Response, APIRouter
from starlette.responses import HTMLResponseclass JsonRegister(BaseModel):page_json_url: str /demo.jsondef __init__(self, **kwargs):super(JsonRegister, self).__init__(**kwargs)def register(self, router: APIRouter):router.add_api_route(self.page_json_url, endpointself.json)def json(self) - {}:amis json格式数据return {}class HtmlRegister(BaseModel):page_url /def __init__(self, **kwargs):super(HtmlRegister, self).__init__(**kwargs)def register(self, router: APIRouter):router.add_api_route(self.page_url, endpointself.html)def html(self):渲染html页面return HTMLResponse(contentPage().render())class TableRegister(JsonRegister):base_url /crud/primary_key idpage_json_url /curd/model.jsonprimary_key_url def __init__(self, **kwargs):super(TableRegister, self).__init__(**kwargs)def register(self, router: APIRouter):super(TableRegister, self).register(routerrouter)self.primary_key_url self.base_url { self.primary_key }router.add_api_route(self.primary_key_url, endpointself.get_item, methods[GET])router.add_api_route(self.primary_key_url, endpointself.delete_item, methods[DELETE])router.add_api_route(self.primary_key_url, endpointself.put_item, methods[PUT])router.add_api_route(self.primary_key_url, endpointself.options_item, methods[OPTIONS])router.add_api_route(self.base_url, endpointself.get_items, methods[GET])router.add_api_route(self.base_url, endpointself.post_item, methods[POST])def get_item(self, request: Request):return {}def delete_item(self, request: Request):return {}def put_item(self, request: Request):return {}def options_item(self, request: Request):return {}def get_items(self, request: Request):return []def post_item(self, request: Request):return {}上诉组件中定义json格式注册器html页面注册器表格增删改查注册器
常见业务功能组件封装
class RouterJson(JsonRegister):page_json_url /router.jsonchildren_pages [{label: 父页面,url: /parent,redirect: /parent/pageA,children: [{label: 子页面,url: pageA,schemaApi: get:/pages/crud-list.json},{label: 子页面,url: pageB,schemaApi: get:/pages/crud-list.json}]}]def json(self) - {}:return {status: 0,msg: ,data: {pages: {children: self.children_pages}}}class AppAdminHtml(HtmlRegister):web_url: str /获取静态页面地址app_brandName 测试Demorouter_json: RouterJson RouterJson()def html(self):app_ App()app_.brandName 测试Demoapp_.api fget:{self.router_json.page_json_url}return HTMLResponse(app_.render())class ModelAdminJson(TableRegister):base_url /crud/primary_key idpage_json_url /curd/model.jsondef get_item(self, request: Request):id_ request.get(self.primary_key)return {name: mock data, id: id_}def delete_item(self, request: Request):id_ request.get(self.primary_key)return {name: mock data, id: id_}def put_item(self, request: Request):id_ request.get(self.primary_key)return {name: mock data, id: id_}def options_item(self, request: Request):id_ request.get(self.primary_key)return {name: mock data, id: id_}def get_items(self, request: Request):return [{name: fmock data {id_}, id: id_} for id_ in range(10)]def post_item(self, request: Request):return {name: mock data, id: 0}class LoginJson(JsonRegister):page_json_url: str /login.json获取json配置接口地址title: str 标题success_redirect_url /成功登陆后的重定向地址login_params {url: ${serverUrl}/login/,method: post,dataType: form-data}def register(self, router: APIRouter):super(LoginJson, self).register(routerrouter)router.add_api_route(/login/, endpointself.post_item, methods[POST])def post_item(self, request: Request):return {name: mock data, id: 0}def json(self):return Page(**{type: page,title: ,style: {backgroundImage: linear-gradient(180deg, #86a4e9, transparent)},cssVars: {--Form-input-onFocused-borderColor: #e8e9eb,--Form-input-onHover-borderColor: #e8e9eb},body: {type: grid-2d,cols: 12,grids: [{x: 5,y: 5,h: 1,w: 4,width: 200,type: form,mode: horizontal,title: ,api: self.login_params,panelClassName: p-r p-l p-b-md,redirect: self.success_redirect_url,body: [{type: tpl,tpl: fdiv styletext-align: center; font-weight: bold;p{self.title}/p/div},{type: input-text,label: False,name: userName,size: full,placeholder: 登陆名,addOn: {label: ,type: text,position: left,icon: fa fa-user}},{type: input-password,label: False,name: password,size: full,placeholder: 密码,addOn: {label: ,type: text,position: left,icon: fa fa-lock}},{type: checkbox,label: False,name: record,option: 记住密码},{type: control,label: False,body: {type: button,level: primary,actionType: submit,block: True,label: 登陆,size: lg}}]}]}}).to_dict()class LoginHtml(HtmlRegister):page_url: str /login获取静态页面地址login_json: LoginJson LoginJson()def html(self):return HTMLResponse(Page(bodyService(schemaApifget:{self.login_json.page_json_url})).render())启动运行
import json
import refrom fastapi import FastAPI, Request, APIRouter
from default_template import *app FastAPI()def main_router():router APIRouter()login_json LoginJson()login_json.title 欢迎登录login_json.success_redirect_url /#/homelogin_json.register(routerrouter)登录jsonrouter_json RouterJson()router_json.children_pages [{label: 首页,url: /home,schema: {type: markdown,value: # title\n markdown **text**}},{label: 测试页面,url: /parent,redirect: /parent/pageA,children: [{label: 测试页面1,url: pageA,schemaApi: get:/pages/crud-list.json},{label: 测试页面2,url: pageB,schemaApi: get:/pages/crud-list.json}]}]router_json.register(routerrouter)路由jsonlogin_html LoginHtml()login_html.login_json login_jsonlogin_html.register(routerrouter)登录页面app_admin_html AppAdminHtml()app_admin_html.app_brandName 测试应用app_admin_html.router_json router_jsonapp_admin_html.register(routerrouter)后台页面return routerapp.include_router(main_router())if __name__ __main__:import uvicornuvicorn.run(app, host0.0.0.0, port9000)
可以知道当下页面中有登录界面后台页面业务中的所有json 页面接口都可以先行注册再注册静态页面