Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
F
financial-system
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
xianyang
financial-system
Commits
adf27ab2
Commit
adf27ab2
authored
Feb 08, 2023
by
xianyang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
用户模型创建,用户添加
parent
d5a3f3a1
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
88 additions
and
50 deletions
+88
-50
crud.py
app/api/users/crud.py
+7
-16
schemas.py
app/api/users/schemas.py
+5
-3
views.py
app/api/users/views.py
+37
-15
env.py
core/config/env.py
+3
-9
db.py
core/storage/db.py
+2
-1
functions.py
libs/functions.py
+8
-0
main.py
main.py
+2
-1
__init__.py
models/__init__.py
+3
-0
users.py
models/users.py
+21
-5
No files found.
app/api/users/crud.py
View file @
adf27ab2
from
datetime
import
datetime
from
sqlalchemy.orm
import
Session
from
sqlalchemy.orm
import
Session
from
app.api.users
import
schemas
from
app.api.users
import
schemas
from
libs.functions
import
md5
from
models
import
users
as
models
from
models
import
users
as
models
...
@@ -8,8 +11,8 @@ def get_user(db: Session, user_id: int):
...
@@ -8,8 +11,8 @@ def get_user(db: Session, user_id: int):
return
db
.
query
(
models
.
User
)
.
filter
(
models
.
User
.
id
==
user_id
)
.
first
()
return
db
.
query
(
models
.
User
)
.
filter
(
models
.
User
.
id
==
user_id
)
.
first
()
def
get_user_by_
email
(
db
:
Session
,
email
:
str
):
def
get_user_by_
name
(
db
:
Session
,
username
:
str
):
return
db
.
query
(
models
.
User
)
.
filter
(
models
.
User
.
email
==
email
)
.
first
()
return
db
.
query
(
models
.
User
)
.
filter
(
models
.
User
.
username
==
username
)
.
first
()
def
get_users
(
db
:
Session
,
skip
:
int
=
0
,
limit
:
int
=
100
):
def
get_users
(
db
:
Session
,
skip
:
int
=
0
,
limit
:
int
=
100
):
...
@@ -17,21 +20,9 @@ def get_users(db: Session, skip: int = 0, limit: int = 100):
...
@@ -17,21 +20,9 @@ def get_users(db: Session, skip: int = 0, limit: int = 100):
def
create_user
(
db
:
Session
,
user
:
schemas
.
UserCreate
):
def
create_user
(
db
:
Session
,
user
:
schemas
.
UserCreate
):
fake_hashed_password
=
user
.
password
+
"notreallyhashed"
db_user
=
models
.
User
(
username
=
user
.
username
,
description
=
user
.
description
,
unique
=
user
.
unique
,
db_user
=
models
.
User
(
email
=
user
.
email
,
hashed_password
=
fake_hashed_password
)
config_key
=
user
.
config_key
,
hashed_password
=
md5
(
user
.
password
),
create_time
=
datetime
.
now
()
)
db
.
add
(
db_user
)
db
.
add
(
db_user
)
db
.
commit
()
db
.
commit
()
db
.
refresh
(
db_user
)
db
.
refresh
(
db_user
)
return
db_user
return
db_user
def
get_items
(
db
:
Session
,
skip
:
int
=
0
,
limit
:
int
=
100
):
return
db
.
query
(
models
.
Item
)
.
offset
(
skip
)
.
limit
(
limit
)
.
all
()
# def create_user_item(db: Session, item: schemas.ItemCreate, user_id: int):
# db_item = models.Item(**item.dict(), owner_id=user_id)
# db.add(db_item)
# db.commit()
# db.refresh(db_item)
# return db_item
\ No newline at end of file
app/api/users/schemas.py
View file @
adf27ab2
...
@@ -2,16 +2,18 @@ from pydantic import BaseModel
...
@@ -2,16 +2,18 @@ from pydantic import BaseModel
class
UserBase
(
BaseModel
):
class
UserBase
(
BaseModel
):
email
:
str
username
:
str
class
UserCreate
(
UserBase
):
class
UserCreate
(
UserBase
):
password
:
str
password
:
str
unique
:
str
description
:
str
config_key
:
str
class
User
(
UserBase
):
class
User
(
UserBase
):
id
:
int
id
:
int
is_active
:
bool
class
Config
:
class
Config
:
orm_mode
=
True
orm_mode
=
True
app/api/users/views.py
View file @
adf27ab2
from
typing
import
List
from
typing
import
List
from
fastapi
import
Depends
,
APIRouter
,
HTTPException
,
FastAPI
from
fastapi
import
Depends
,
APIRouter
,
HTTPException
,
FastAPI
from
fastapi.security
import
OAuth2PasswordRequestForm
from
sqlalchemy.orm
import
Session
from
sqlalchemy.orm
import
Session
import
models
from
app.api.users
import
crud
,
schemas
from
app.api.users
import
crud
,
schemas
from
models
import
users
from
core.storage.db
import
SessionLocal
from
core.storage.db
import
SessionLocal
# models.Base.metadata.create_all(bind=engine)
router
=
APIRouter
()
router
=
APIRouter
()
# Dependency
def
get_db
():
def
get_db
():
db
=
SessionLocal
()
db
=
SessionLocal
()
try
:
try
:
...
@@ -19,13 +17,12 @@ def get_db():
...
@@ -19,13 +17,12 @@ def get_db():
finally
:
finally
:
db
.
close
()
db
.
close
()
# @router.post("/", response_model=schemas.User)
@
router
.
post
(
"/"
,
response_model
=
schemas
.
User
)
# def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
def
create_user
(
user
:
schemas
.
UserCreate
,
db
:
Session
=
Depends
(
get_db
)):
# db_user = crud.get_user_by_email(db, email=user.email)
db_user
=
crud
.
get_user_by_email
(
db
,
email
=
user
.
email
)
# if db_user:
if
db_user
:
# raise HTTPException(status_code=400, detail="Email already registered")
raise
HTTPException
(
status_code
=
400
,
detail
=
"Email already registered"
)
# return crud.create_user(db=db, user=user)
return
crud
.
create_user
(
db
=
db
,
user
=
user
)
@
router
.
get
(
"/"
,
response_model
=
List
[
schemas
.
User
])
@
router
.
get
(
"/"
,
response_model
=
List
[
schemas
.
User
])
...
@@ -42,7 +39,32 @@ def read_user(user_id: int, db: Session = Depends(get_db)):
...
@@ -42,7 +39,32 @@ def read_user(user_id: int, db: Session = Depends(get_db)):
return
db_user
return
db_user
@
router
.
post
(
"/login"
,
tags
=
[
"POST"
])
def
login
():
"""
OAuth2 compatible token login, get an access token for future requests.
"""
# bucket = get_default_bucket()
# user = crud.user.authenticate(
# bucket, username=form_data.username, password=form_data.password
# )
# if not user:
# raise HTTPException(status_code=400, detail="Incorrect email or password")
# elif not crud.user.is_active(user):
# raise HTTPException(status_code=400, detail="Inactive user")
# access_token_expires = timedelta(minutes=config.ACCESS_TOKEN_EXPIRE_MINUTES)
return
{
"token_type"
:
"bearer"
,
}
@
router
.
post
(
"/create"
,
response_model
=
schemas
.
User
)
def
create_user
(
data
:
schemas
.
UserCreate
,
db
:
Session
=
Depends
(
get_db
)):
"""添加用户"""
db_user
=
crud
.
get_user_by_name
(
db
,
username
=
data
.
username
)
if
db_user
:
raise
HTTPException
(
status_code
=
400
,
detail
=
"用户已存在"
)
return
crud
.
create_user
(
db
=
db
,
user
=
data
)
@
router
.
get
(
"/items"
,
tags
=
[
'GET'
,
'POST'
])
def
ceshi
():
return
{
'message'
:
'Hello demo Adsadsadsadsadaspplications!'
}
core/config/env.py
View file @
adf27ab2
...
@@ -3,12 +3,8 @@
...
@@ -3,12 +3,8 @@
切换环境,修改文档后面的命令 env = ...
切换环境,修改文档后面的命令 env = ...
"""
"""
import
os
from
pydantic
import
BaseSettings
from
pydantic
import
BaseSettings
# from starlette.middleware.cors import CORSMiddleware
# from main import app
#
# from app.api.api_v1 import api_router
class
Env
(
BaseSettings
):
class
Env
(
BaseSettings
):
...
@@ -20,14 +16,12 @@ class Env(BaseSettings):
...
@@ -20,14 +16,12 @@ class Env(BaseSettings):
class
TestingEnv
(
Env
):
class
TestingEnv
(
Env
):
'''
"""测试环境配置"""
测试环境配置
'''
TESTING
:
bool
=
True
TESTING
:
bool
=
True
class
ProdEnv
(
Env
):
class
ProdEnv
(
Env
):
'''生产环境配置'''
"""生产环境配置"""
DATABASE_URI
:
str
=
'mysql://user@localhost/foo'
DATABASE_URI
:
str
=
'mysql://user@localhost/foo'
DATABASE_USER
:
str
=
''
DATABASE_USER
:
str
=
''
DATABASE_PWD
:
str
=
''
DATABASE_PWD
:
str
=
''
...
...
core/storage/db.py
View file @
adf27ab2
...
@@ -20,7 +20,7 @@ SQLALCHEMY_DATABASE_URL = f'sqlite:///{modul_path}/sql_app.db'
...
@@ -20,7 +20,7 @@ SQLALCHEMY_DATABASE_URL = f'sqlite:///{modul_path}/sql_app.db'
# engine = create_engine(
# engine = create_engine(
# SQLALCHEMY_DATABASE_URL, encoding='utf-8', echo=True, connect_args={'check_same_thread': False}
# SQLALCHEMY_DATABASE_URL, encoding='utf-8', echo=True, connect_args={'check_same_thread': False}
# )
# )
engine
=
create_engine
(
'mysql+mysqldb://data_center:KCMBfAjeJhbJXsSe@43.138.132.9:3398/f
j-data-center
'
)
engine
=
create_engine
(
'mysql+mysqldb://data_center:KCMBfAjeJhbJXsSe@43.138.132.9:3398/f
inance
'
)
# 数据库 session 类,用于创建 session 实例
# 数据库 session 类,用于创建 session 实例
# autoflush 是指发送数据库语句到数据库,但数据库不一定执行写入到磁盘
# autoflush 是指发送数据库语句到数据库,但数据库不一定执行写入到磁盘
...
@@ -28,3 +28,4 @@ SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
...
@@ -28,3 +28,4 @@ SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# 创建 Base 类,用于 ORM 模型的继承
# 创建 Base 类,用于 ORM 模型的继承
Base
=
declarative_base
()
Base
=
declarative_base
()
Base
.
metadata
.
create_all
(
engine
)
libs/functions.py
0 → 100644
View file @
adf27ab2
import
hashlib
def
md5
(
s
):
"""md5加密"""
sign_str
=
hashlib
.
md5
()
sign_str
.
update
(
s
.
encode
(
'utf-8'
))
return
sign_str
.
hexdigest
()
main.py
View file @
adf27ab2
...
@@ -5,7 +5,7 @@ from fastapi import FastAPI
...
@@ -5,7 +5,7 @@ from fastapi import FastAPI
from
app.api.api_v1
import
api_router
from
app.api.api_v1
import
api_router
from
starlette.middleware.cors
import
CORSMiddleware
from
starlette.middleware.cors
import
CORSMiddleware
from
core.storage.db
import
Base
,
engine
app
=
FastAPI
()
app
=
FastAPI
()
...
@@ -19,6 +19,7 @@ app.add_middleware(
...
@@ -19,6 +19,7 @@ app.add_middleware(
allow_headers
=
[
'*'
])
# 允许跨域的headers,可以用来鉴别来源等作用。
allow_headers
=
[
'*'
])
# 允许跨域的headers,可以用来鉴别来源等作用。
app
.
include_router
(
api_router
,
prefix
=
"/api"
)
app
.
include_router
(
api_router
,
prefix
=
"/api"
)
Base
.
metadata
.
create_all
(
bind
=
engine
)
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
uvicorn
.
run
(
app
=
app
,
host
=
"127.0.0.1"
,
port
=
8001
)
uvicorn
.
run
(
app
=
app
,
host
=
"127.0.0.1"
,
port
=
8001
)
models/__init__.py
View file @
adf27ab2
from
core.storage.db
import
Base
,
engine
Base
.
metadata
.
create_all
(
bind
=
engine
)
models/users.py
View file @
adf27ab2
from
sqlalchemy
import
Boolean
,
Column
,
ForeignKey
,
Integer
,
String
from
sqlalchemy
import
Boolean
,
Column
,
ForeignKey
,
Integer
,
String
,
DateTime
,
Float
,
ARRAY
from
sqlalchemy.orm
import
relationship
from
sqlalchemy.orm
import
relationship
from
core.storage.db
import
Base
from
core.storage.db
import
Base
...
@@ -8,8 +8,24 @@ class User(Base):
...
@@ -8,8 +8,24 @@ class User(Base):
__tablename__
=
"users"
__tablename__
=
"users"
id
=
Column
(
Integer
,
primary_key
=
True
,
index
=
True
)
id
=
Column
(
Integer
,
primary_key
=
True
,
index
=
True
)
email
=
Column
(
String
,
unique
=
True
,
index
=
True
)
username
=
Column
(
String
(
100
),
unique
=
True
,
index
=
True
)
hashed_password
=
Column
(
String
)
description
=
Column
(
String
(
255
))
is_active
=
Column
(
Boolean
,
default
=
True
)
unique
=
Column
(
String
(
50
),
unique
=
True
)
hashed_password
=
Column
(
String
(
50
))
config_key
=
Column
(
String
(
50
))
uuid
=
Column
(
String
(
50
))
authority
=
Column
(
Integer
)
remaining_sum
=
Column
(
Float
)
entry_account
=
ARRAY
(
Column
(
Integer
))
out_account
=
ARRAY
(
Column
(
Integer
))
create_time
=
Column
(
DateTime
)
update_time
=
Column
(
DateTime
)
class
Authority
(
Base
):
__tablename__
=
"authority"
id
=
Column
(
Integer
,
primary_key
=
True
,
index
=
True
)
name
=
Column
(
String
(
50
),
unique
=
True
,
index
=
True
)
create_time
=
Column
(
DateTime
)
items
=
relationship
(
"Item"
,
back_populates
=
"owner"
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment