diff --git a/parameciofast/libraries/db/simplequery.py b/parameciofast/libraries/db/simplequery.py new file mode 100644 index 0000000..2268b91 --- /dev/null +++ b/parameciofast/libraries/db/simplequery.py @@ -0,0 +1,27 @@ + +# A more simple set for make queries + +def insert(model, dict_values, db): + + final_values={} + + for k in model.fields.keys(): + final_values[k]=model.fields[k].check(dict_values.get(k, '')) + + del final_values[model.name_field_id] + + str_fields="`"+"`, `".join(final_values.keys())+"`" + + str_query='insert into {} ({}) VALUES ({})'.format(model.name, str_fields, ", ".join(['%s']*len(final_values))) + + success=False + + with db.query(str_query, list(final_values.values())) as cursor: + + if cursor.rowcount>0: + + model.last_id=cursor.lastrowid + success=True + + return success + diff --git a/parameciofast/libraries/db/webmodel.py b/parameciofast/libraries/db/webmodel.py index 3acf67c..298c0b0 100644 --- a/parameciofast/libraries/db/webmodel.py +++ b/parameciofast/libraries/db/webmodel.py @@ -1717,3 +1717,4 @@ class QueryModel(WebModel): self.order_by="ORDER BY "+self.field_quote+self.name+self.field_quote+"."+self.field_quote+"id"+self.field_quote+" ASC" + diff --git a/parameciofast/modules/fastadmin/app.py b/parameciofast/modules/fastadmin/app.py index e392190..67998b3 100644 --- a/parameciofast/modules/fastadmin/app.py +++ b/parameciofast/modules/fastadmin/app.py @@ -9,11 +9,15 @@ from pydantic import BaseModel, Field from parameciofast.modules.fastadmin.models.admin import UserAdmin from parameciofast.libraries.db.webmodel import WebModel from parameciofast.libraries.fastutils import ResponseData +from parameciofast.libraries.db import simplequery env=env_theme(__file__) t=PTemplate(env, app.url_path_for) -useradmin=UserAdmin() +usermodel=UserAdmin() +#useradmin.create_forms() + +#useradmin.safe_query=True @admin_app.get('/', response_class=HTMLResponse) def home_admin(request: Request, paramecio_session: Annotated[str | None, Cookie(description='Cookie for validate into the admin site. The cookie name can change in you settings/config.py')] = None): @@ -50,7 +54,7 @@ def signup_admin(request: Request): num_users=cursor.fetchone()['num_users'] if num_users>0: - return RedirectResponse(app.url_path_for('signup_admin')) + return RedirectResponse(app.url_path_for('login_admin')) db.close() @@ -81,7 +85,7 @@ def check_login_admin(user: UserAdmin, request: Request) -> ResponseData: if result: - if useradmin.fields['password'].verify(user.password, result['password']): + if usermodel.fields['password'].verify(user.password, result['password']): request.session['login_admin']=True error=0 @@ -101,17 +105,17 @@ class UserSignup(BaseModel): "json_schema_extra": { "examples": [ { - "username": "johnny", + "username": "johnny5", "email": "trial@example.com", - "password": "anrandompasswordthatineverused", - "repeat_password": "anrandompasswordthatineverused", + "password": "arandompasswordthatineverused", + "repeat_password": "arandompasswordthatineverused", } ] } } @admin_app.post('/signup') -def signup_insert_admin(user: Annotated[UserSignup, Body(embed=True)], request: Request) -> ResponseData: +def signup_insert_admin(user: UserSignup, request: Request) -> ResponseData: i18n=I18n('admin', I18n.session_lang(request.session)) @@ -127,10 +131,16 @@ def signup_insert_admin(user: Annotated[UserSignup, Body(embed=True)], request: num_users=cursor.fetchone()['num_users'] if num_users: - return RedirectResponse(app.url_path_for('login_admin')) + message="You cannot add new users from here" else: - - pass + error=0 + + if not error: + + if simplequery.insert(usermodel, dict(user), db): + error=0 + message="User added!" + db.close() diff --git a/parameciofast/modules/fastadmin/templates/login.phtml b/parameciofast/modules/fastadmin/templates/login.phtml index c3e10ea..c2a2397 100644 --- a/parameciofast/modules/fastadmin/templates/login.phtml +++ b/parameciofast/modules/fastadmin/templates/login.phtml @@ -28,17 +28,20 @@ ${tlang('Login')}