Configurare program

Overclock GPU folosind Lenovo Vantage – pentru NVIDIA

Pentru a overclocka GPU-ul folosind Lenovo Vantage, urmează pașii de mai jos:

1. Verifică compatibilitatea laptopului

  • Funcția de overclocking GPU este disponibilă doar pe anumite modele Lenovo Legion cu plăci grafice NVIDIA. Asigură-te că laptopul tău suportă această funcție verificând documentația oficială pentru modelul tău.

2. Actualizează driverele și firmware-ul

  • Deschide aplicația NVIDIA GeForce Experience și instalează cele mai recente drivere pentru placa ta grafică.

  • Utilizează Lenovo Vantage pentru a verifica și instala actualizările de firmware și BIOS disponibile.

3. Activează GPU Overclocking în Lenovo Vantage

  • Deschide aplicația Lenovo Vantage din meniul Start sau din bara de sistem

  • Navighează la secțiunea Legion Edge sau Gaming Features, în funcție de versiunea aplicației

  • Activează opțiunea GPU Overclocking prin comutarea butonului corespunzător

  • Lenovo Vantage aplică un profil preconfigurat pentru overclocking, optimizat pentru performanță sigură. Dacă dorești să ajustezi manual setările:

    • Mărește frecvențele nucleului GPU (core clock) și ale memoriei (memory clock) în pași mici, de exemplu +50 MHz până la +100 MHz, pentru a evita instabilitatea.

4. Testează performanța și stabilitatea

  • Folosește instrumente de benchmarking, cum ar fi 3DMark sau Unigine Heaven, pentru a verifica stabilitatea și performanța după aplicarea setărilor.

  • Monitorizează temperaturile GPU utilizând Lenovo Vantage sau alte aplicații precum HWMonitor. Asigură-te că temperaturile nu depășesc 85°C pentru a preveni problemele de supraîncălzire.

5. Ajustează răcirea

  • Activează modul Performance Mode în Lenovo Vantage pentru a optimiza viteza ventilatoarelor și utilizarea CPU/GPU.

  • Folosește un cooling pad sau plasează laptopul într-un mediu bine ventilat pentru a menține temperaturile scăzute.

6.Dacă întâmpini instabilitate, crash-uri sau supraîncălzire:

  • Dezactivează opțiunea de GPU Overclocking în Lenovo Vantage.

  • Revino la setările implicite apăsând butonul de pornire timp de 10-15 secunde pentru resetare.

[mai mult...]

Undervolting-ul procesorului folosind Lenovo Vantage

Pentru a realiza undervolting-ul procesorului folosind Lenovo Vantage, urmează pașii de mai jos:

1. Configurarea BIOS-ului

Înainte de a putea folosi funcția de undervolting din Lenovo Vantage, trebuie să faci câteva modificări în BIOS:

  • Repornește laptopul și apasă repetat tasta F2 (sau o altă tastă specifică modelului tău) pentru a intra în BIOS.

  • În BIOS:

    • Activează opțiunea CPU Overclocking (pe unele modele poate fi denumită Legion Optimization).

    • Dezactivează Undervolt Protection.

  • Salvează modificările și repornește dispozitivu.

2. Configurarea în Lenovo Vantage

După ce ai configurat BIOS-ul, urmează acești pași în aplicația Lenovo Vantage:

  • Deschide aplicația Lenovo Vantage.

  • Accesează opțiunea CPU Overclock din colțul din dreapta sus.

  • Localizează setările:

    • Core Voltage Offset (pentru nucleele principale ale procesorului).

    • Efficient Cores Cache Voltage Offset (pentru nucleele eficiente).

  • Redu valorile acestor offset-uri pentru a realiza undervolting-ul procesorului. De exemplu, o valoare de început sigură ar fi -0.100V pentru Core Voltage Offset

  • Salvează modificările.

3. Testarea stabilității

După aplicarea setărilor:

  • Monitorizează stabilitatea sistemului și temperaturile utilizând software-uri precum HWInfo sau alte programe de testare.

  • Dacă sistemul devine instabil (e.g., se blochează sau apare un BSOD), revino în Lenovo Vantage și ajustează valorile până când găsești un echilibru între performanță și stabilitate

Notă importantă

  • Undervolting-ul nu ar trebui să anuleze garanția dispozitivului, dar este recomandat să efectuezi modificările cu precauție.

  • Dacă întâmpini probleme majore, poți reveni la setările implicite ținând apăsat butonul de pornire timp de 8-15 secunde pentru a reseta parametrii.

Prin aceste ajustări, vei putea reduce consumul de energie și temperaturile procesorului fără a afecta performanța generală.

[mai mult...]

How to create ISO Files from Discs on Windows, Mac, and Linux

An ISO file is a digital copy of a disk image that has been extracted from physical media. Creating ISOs is a great way to archive physical discs, which are likely to degrade over time. You can mount ISO files or explore their contents as if you had the physical disc in your drive. This is increasingly important in a world where disc drives are less common than ever before.

[mai mult...]

Considerente pentru testarea exhaustiva a stabilitatii supratactarii memoriei ram

Pentru impartirea kiturilor de memorii ram in functie de performantele acestora, producatorii supun chipurile de memorie unor teste conform standardelor de interes (precum cele oferite de jedec). Suplimentar, producatorii pot oferi profile implicite pentru supratactarea (frecventelor) memoriilor RAM, valori ce pot fi de asemenea re-crescute de catre utilizatori.
Uneori chiar si supratactarea oferita de producator va produce instabilitate in sistem (de la coruperea datelor, BIOSului pana la blue-screens sau regresiuni de performanta). In continuare vom vedea o serie de variabile ce sunt de obicei ignorate, dar impacteaza aceste rezultate.

[mai mult...]

Cum se instalează Rancher pe serverul Debian 12

Rancher este o platformă open-source de gestionare a containerelor, concepută pentru a facilita implementarea, gestionarea și guvernarea clusterelor Kubernetes. Spre deosebire de o distribuție Kubernetes care înlocuiește Kubernetes în sine, Rancher acționează ca o soluție de management care se află deasupra unuia sau mai multor clustere Kubernetes, oferind o platformă centralizată de pe care administratorii își pot supraveghea întreaga infrastructură de containere.

Înainte de a instala Rancher, trebuie să vă asigurați că Docker este instalat pe sistemul dvs. În această secțiune, veți instala Docker Engine prin intermediul depozitului oficial Docker în sistemul Debian.

Mai întâi, rulați comanda de mai jos pentru a vă actualiza indexul pachetelor și pentru a instala pachete precum „ca-certificates” și „curl”.

sudo apt update && sudo apt install ca-certificates curl -y

Acum executați următoarea comandă pentru a adăuga cheia GPG pentru depozitul Docker.

sudo install -m 0755 -d /etc/apt/keyrings 
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc 
sudo chmod a+r /etc/apt/keyrings/docker.asc

Apoi, rulați următoarea comandă pentru a adăuga depozitul Docker la sistemul dumneavoastră Debian. Aceasta va detecta automat versiunea dvs. Debian.

echo \ 
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ 
$(. /etc/os-release && echo "$VERSION_CODENAME") stabil" | \ 
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null


Acum că ați adăugat depozitul Docker și cheia GPG, executați comanda de mai jos pentru a vă reîmprospăta indexul pachetului și pentru a instala Docker Engine în sistem. În acest exemplu, veți instala Docker Engine cu pachete suplimentare, cum ar fi Docker Compose și pluginul Docker Buildx.

sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Introduceți „Y” pentru a continua instalarea.

Odată ce instalarea este finalizată, verificați starea serviciului Docker folosind comanda „systemctl” de mai jos. Veți vedea că Docker rulează și este activat pe mașina dvs. Debian.

sudo systemctl este activat docker 
sudo systemctl status docker

În cele din urmă, puteți executa comanda „docker” de mai jos pentru a rula containerul „hello-word”.

sudo docker rulează hello-world

Dacă aveți succes, veți primi următorul mesaj „ hello world ” de la Docker.

Acum că Docker este instalat, sunteți gata să instalați Rancher. În această secțiune, veți descărca imaginea Rancher, apoi veți rula containerul Rancher prin Docker. În acest exemplu, vom folosi certificatele autosemnate care sunt generate automat de containerul Rancher. Vom folosi, de asemenea, cea mai recentă versiune a imaginii Rancher.

Descărcați imaginea Rancher folosind comanda „docker pull” de mai jos. În acest exemplu, vom folosi cea mai recentă versiune Rancher.

sudo docker pull rancher/rancher:latest

Odată ce imaginea Rancher este descărcată, executați comanda „docker run” pentru a rula Rancher. Cu aceasta, containerul Rancher va rula în fundal și va exporta porturile 80 și 443 pe serverul Debian gazdă.

sudo docker run -d --restart=unless-stop \ 
-p 80:80 -p 443:443 \ 
--privileged \ 
rancher/rancher:latest

Verificați starea containerului folosind comanda de mai jos.

sudo docker ps

În rezultatul de mai jos, puteți vedea că Rancher rulează pe portul 443 . De asemenea, puteți vedea ID-ul containerului și numele containerului.

În plus, dacă aveți o eroare, puteți verifica jurnalul Racher cu următoarea comandă „docker”.

docker ps -a 
docker log container-name sau container id

Opțiunea „ps -a” vă va afișa containerele care rulează și au ieșit, iar comanda „docker log” este folosită pentru a verifica jurnalele containerului.

În acest moment, Rancher rulează pe sistemul dumneavoastră Debian ca container. Pentru următorul pas, vă veți conecta la tabloul de bord Rancher pentru a vedea nodul unic Kubernetes care rulează deasupra instalării Rancher.

Deschideți browserul web și vizitați adresa IP a serverului Debian, urmată de portul 8080 , cum ar fi https://192.168.10.41:8080/ . Dacă instalarea dvs. este reușită, veți primi următoarea pagină de conectare la Rancher.

Înapoi la terminal și rulați comanda de mai jos pentru a obține parola Rancher. Asigurați-vă că schimbați ID-ul containerului cu instalarea și copiați parola.

sudo docker înregistrează CONTAINER ID 2>&1 | grep „Bootstrap Password:”

Acum introduceți parola și faceți clic pe Conectare cu utilizatorul local.

Apoi, copiați parola generată pentru rancherul dvs. și asigurați-vă că acceptați termenii și licența.

Acum veți vedea următorul tablou de bord Rancher. În exemplul de mai jos, puteți vedea clusterul Kubernetes cu un singur nod creat cu K3s.

Faceți click pe clusterul Kubernetes local și veți obține mai multe informații despre clusterul dvs. Kubernetes.

Mai întâi, descărcați KubeConfig pe computerul local. Din tabloul de bord Rancher, faceți clic pe meniul fișier de mai jos.

Instalați „kubectl” pe sistemul dumneavoastră cu comanda de mai jos. Pe Debian 12, puteți instala pachetul „ kubernetes-client ” prin APT.

sudo apt install kubernetes-client -y


Setați KUBECONFIG implicit la fișierul dvs. În acest exemplu, fișierul KubeConfig este „kubeconfig.yaml”.

exportă KUBECONFIG=~/kubeconfig.yaml

În cele din urmă, rulați comanda „kubectl” de mai jos pentru a obține poduri de listă pe toate spațiile de nume Kubernetes.

kubectl obține pods --all-namespaces

Veți vedea că fiecare pod pentru clusterul Kubernetes din Rancher rulează.

[mai mult...]

Cum se instalează Fast API cu MongoDB pe Ubuntu 24.04

FastAPI este un cadru web bazat pe Python pentru crearea de servicii API. Este un cadru modern, rapid și de înaltă performanță care acceptă operațiuni asincrone.

Pentru a începe cu acest ghid, asigurați-vă că aveți următoarele:

  • Un sistem Ubuntu 24.04
  • Un utilizator non-root cu privilegii de administrator.

Mai întâi, rulați comanda de mai jos pentru a vă actualiza indexul pachetului și instalați „gnupg” și „curl” în sistemul dumneavoastră.

sudo apt update && sudo apt install gnupg curl -y

Executați comanda de mai jos pentru a adăuga cheia GPG pentru serverul MongoDB.

curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | \ 
sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg \ 
--dearmor

Adăugați depozitul MongoDB folosind comanda de mai jos.

echo „deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse” | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list

După ce depozitul este adăugat, rulați următoarea comandă pentru a vă reîmprospăta indexul pachetului și pentru a instala serverul MongoDB. Introduceți „Y” pentru a confirma instalarea.

sudo apt update && sudo apt install mongodb-org

Când instalarea este finalizată, porniți și activați serviciul MongoDB „mongod”, apoi verificați starea serviciului MongoDB pentru a vă asigura că rulează.

sudo systemctl enable --acum mongod 
sudo systemctl status mongod

Puteți vedea mai jos că serverul MongoDB rulează.

În plus, vă puteți conecta la serverul MongoDB cu comanda „mongosh” de mai jos. Pentru a ieși, apăsați Ctrl+d.

mongosh

Cu MongoDB instalat, veți instala pachetele Python și veți configura directorul proiectului și mediul virtual.

Instalați modulele Python, Pip și Venv cu următoarea comandă. Introduceți „Y” pentru a confirma instalarea.

sudo apt install python3 python3-pip python3-venv


Odată ce instalarea este finalizată, conectați-vă la utilizatorul dvs.

su - username

Acum creați un nou director „ ~/app ” și mutați-vă în el. Acest director va fi folosit pentru a stoca proiectul dvs. FastAPI.

mkdir -p ~/app; cd ~/app

Executați comanda de mai jos pentru a crea un nou mediu virtual „ venv ” și activați-l. Cu aceasta, promptul dumneavoastră shell va deveni ca „ (venv) user@hostname ”.

python3 -m venv .venv 
sursă .venv/bin/activate


De aici, mediul tău de lucru trebuie să fie în mediul virtual „venv”. Vă puteți deconecta de la „venv” folosind comanda de mai jos.

deactivate

Acum că ați creat și activat mediul virtual Python, să instalăm FastAPI și să creăm structura proiectului.

Cu comanda „pip3”, executați-o pentru a instala pachetele „fastapi” și „uvicorn”.

pip3 install fastapi uvicorn
  • „fastapi” este principalul cadru web FastAPI pentru construirea de API-uri în Python
  • „Uvicorn” este implementarea serverului web ASGI (Asynchronous Server Gateway Interface) în Python.

După finalizarea instalării, creați noi fișiere și directoare cu următoarea comandă.

mkdir -p server/{models,routes}
touch main.py server/{app.py,database.py} server/models/itemModels.py server/routes/item.py

Mai jos este structura proiectului nostru FastAPI.


server/app.py

Acum că proiectul dvs. este gata, să modificăm fișierul „server/app.py”, care este principala aplicație a proiectului dumneavoastră FastAPI.

Deschideți fișierul „ app.py ” cu editorul de text și copiați următorul script.

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
 return {"message": "Hello FastAPI!"}
  • Importați modulul FastAPI în proiectul dvs. și legați-l la variabila „aplicație”.
  • Creați o nouă funcție „rădăcină” care returnează „Hello FastAPI!”
  • Funcția „rădăcină” a răspuns la metoda GET de pe URL-ul rădăcină
  • „async” marchează funcția dumneavoastră ca o funcție asincronă și ar putea folosi „wait” în corpul său atunci când este apelată

principal.py

În această secțiune, vom modifica fișierul „main.py” care va fi folosit pentru a rula proiectul FastAPI prin „uvicorn” (server web ASGI în Python).

Acum deschideți și modificați scriptul „ main.py ” și introduceți următorul cod.

import uvicorn 

if __name__ == "__main__": 
uvicorn.run ("server.app:app", host="0.0.0.0", port=8080, reload=True)
  • Importați modulul „uvicorn”.
  • Când scriptul „main.py” este executat, acesta va încărca „aplicația” sau modulul FastAPI în „server/app.py”
  • FastAPI va rula pe „0.0.0.0” cu portul „8080”
  • Activați reîncărcarea automată când codul se schimbă prin „reload=True”

Rulați proiectul FastAPI

Acum că proiectul dvs. este gata, să rulăm primul proiect FastAPI. Executați scriptul „main.py” după cum urmează și FastAPI-ul dumneavoastră va rula pe sistemul dumneavoastră.

python3 main.py

Acum deschideți browserul web și vizitați http://SERVERIP:8080/ . Dacă instalarea a reușit, veți vedea „Hello FastAPI!” mesaj. Îl poți accesa și prin „curl” din terminal.

În cele din urmă, puteți accesa documentația API pe http://SERVERIP:8080/docs > care este furnizată de Swagger UI.

În acest ghid, veți crea un API de bază cu FastAPI și MongoDB. API-ul dvs. ar trebui să poată face CRUD cu serverul de baze de date MongoDB. În ceea ce privește acest pas, vă veți conecta proiectul la serverul MongoDB.

Mai întâi, rulați comanda „pip3” de mai jos pentru a instala driverul MongoDB „ motor ” în proiectul dumneavoastră. „motor” oferă acces API non-blocant și bazat pe corutine la serverul MongoDB.

pip3 install motor

server/database.py

După ce modulul „ motor ” este instalat, să modificăm scriptul „ server/database.py ”. Deschideți fișierul „server/database.py” cu editorul de text și introduceți următorul script. Acesta va fi folosit pentru a vă conecta la serverul MongoDB prin modulul „motor”.

from motor.motor_asyncio import AsyncIOMotorClient

MONGODB_HOST = "mongodb://localhost:27017"

connection = AsyncIOMotorClient(MONGODB_HOST)

database = connection.items
item_collection = database.get_collection("item_collection")
  • Importați „AsyncIOMotorClient” din „motor.motor_asyncio”
  • Creați o nouă constantă „MONGODB_HOST” și indicați către serverul MongoDB „mongodb://localhost:27017”
  • Conectați-vă la serverul MongoDB prin variabila „conexiune”.
  • Conectați-vă la baza de date „articole” prin variabila „bază de date”.
  • Accesați colecțiile din baza de date cu variabila „item_collection”.

Crearea modelului bazei de date cu pydantic

       În această secțiune, vă veți proiecta datele prin „ pydantic ”, care oferă modelare pentru baza noastră de date MongoDB.

Instalați modulul „pydantic” cu comanda „pip3” de mai jos. Modulul „ pydantic ” este o bibliotecă de validare a datelor care vă permite să creați schema bazei de date prin model.

pip3 install pydantic

Acum deschideți fișierul „ server/models/itemModels.py ” cu editorul de text și copiați următorul script.

from pydantic import BaseModel, Field
from typing import Optional

class Item(BaseModel):
 name: str
 category: str
 stocks: int
 price: int = Field(gt=0)

 class Config:
 json_schema_extra = {
 "example": {
 "name": "Company Smart Watch",
 "category": "smartwatch",
 "stocks": 10,
 "price": 1000,
 }
 }

class ItemUpdate(BaseModel):
 name: Optional[str] = None
 category: Optional[str] = None
 stocks: Optional[int] = None
 price: Optional[int] = None

 class Config:
 json_schema_extra = {
 "example": {
 "name": "New Smart watch",
 "category": "new-smartwatch",
 "stocks": 5,
 "price": 500,
 }
 }
  • Importați modulele „BaseModel” și „Field” din „pydantic”
  • Importați modulul „Opțional” din „tastare”
  • Creați următoarea schemă de bază de date „Articol” pentru FastAPI:
    • „nume” și „categorie” cu șir de tip
    • „stocuri” și „preț” cu categoria întreg
    • „prețul” trebuie să fie mai mare decât 0
  • Extindeți modelul de date prin clasa „Config” oferind un exemplu de date pe care utilizatorul le poate include în cerere
  • Creați următoarea schemă „ItemUpdate” cu fiecare câmp opțional.

 Adăugarea de operațiuni CRUD

        În acest moment, ați creat o conexiune la serverul MongoDB și ați creat schema bazei de date prin „pydantic”. Să trecem la crearea operațiunilor CRUD cu FastAPI și MongoDB.

Deschideți din nou scriptul „ server/database.py ” și creați o nouă funcție „ item_helper ” cu tipul „ dict ”. Apelați această funcție pentru a obține date detaliate despre un articol.

def item_helper(item) -> dict:
 return {
 "id": str(item["_id"]),
 "name": item["name"],
 "category": item["category"],
 "stocks": item["stocks"],
 "price": item["price"],
 }

Adăugați următoarea linie pentru a importa modulul „ ObjectId ” din „bson.objectid”. „ ObjectId ” face parte din tipul de date din BSON, pe care MongoDB îl folosește pentru stocarea datelor și reprezentarea datelor JSON.

from bson.objectid import ObjectId

Creați un articol

        În primul rând, veți crea o funcție asincronă care va putea adăuga date noi la baza de date MongoDB.

Creați o nouă funcție „a dd_item ” ca următorul:

# Adăugați un articol nou
async def add_item(item_details: dict) -> dict :
 item = await item_collection.insert_one(item_details)
 new_item = await item_collection.find_one({"_id": item.inserted_id})
 return item_helper(new_item)
  • Funcția „add_item” acceptă datele din dicționar ale detaliilor articolului dvs
  • Prin „item_collection” pentru a accesa documentele din baza de date și pentru a executa interogarea „insert_one” pentru a adăuga un nou articol
  • Noul articol va fi tipărit după operarea cu succes

Preluați toate articolele

       În al doilea rând, veți crea o nouă funcție „get_items” care va putea prelua toate elementele disponibile din baza de date.

Creați o nouă funcție „ get_items ” pentru a prelua toate articolele din MongoDB.

# preluati toate elementele
async def get_items():
 items = []
 async for item in item_collection.find():
 items.append(item_helper(item))
 return items
  • Veți crea o listă goală de „articole”
  • Folosind interogarea „find()” pentru a căuta toate datele și a le trece în buclă
  • Fiecare articol va fi adăugat la lista „articole” prin metoda „adăugați”.
  • După finalizarea buclei, articolele dvs. vor fi afișate

Preluați un articol specific bazat pe id

          Apoi, veți crea o nouă funcție care va putea prelua date pentru un anumit selector „id”. Aceasta vă va afișa date detaliate despre anumite articole.

Creați o nouă funcție „ get_item ” pentru a prelua date despre anumite articole. Funcția „get_item” va accepta un șir de „id” ca selector și va returna un dicționar.

# preluare un anumit articol 
 async def get_item(id: str) -> dict:
 item = await item_collection.find_one({"_id": ObjectId(id)})
 if item:
 return item_helper(item)
 return "Articol nu a fost găsit."
  • Interogarea „find_one()” va fi folosită pentru a prelua date bazate pe „id”
  • Dacă se găsește un articol, detaliile vor fi afișate folosind formatul de dicționar „item_helper”.
  • Dacă articolul nu este disponibil, răspunsul este „Articol nu a fost găsit”

Actualizați un articol

        Acum veți crea o nouă funcție pentru actualizarea unui articol. De asemenea, vă puteți actualiza parțial articolul prin API.

Definiți noua funcție „ change_item ” ca următoarele coduri:

# update item
async def change_item(id: str, data: dict):
 if len(data) < 1:
 return "Please input your data"
 find_item = await item_collection.find_one({"_id": ObjectId(id)})
 if find_item:
 item_update = await item_collection.update_one({"_id": ObjectId(id)}, {"$set": data})
 if item_update:
 return True
 return False
  • Funcția „change_item” ia două argumente, „id-ul” articolului țintă și „data” ca date noi
  • Dacă datele sunt goale sau „< 1”, operațiunea s-a încheiat
  • Această funcție va găsi un articol pe baza selectorului „id”.
  • Dacă „id-ul” este găsit, „item_update” va fi executat
  • Dacă „item_update” are succes, returnați „True” sau returnați „False” dacă nu

Ștergeți un articol

       În cele din urmă, veți crea funcția „delete_item” pentru ștergerea articolelor printr-un anumit selector. Pentru a șterge un articol, vom crea funcția „ delete_item ” și vom folosi selectorul „id” după cum urmează:

# ștergeți un articol 
  async def delete_item(id: str):
 item = await item_collection.find_one({"_id": ObjectId(id)})
 if item:
 await item_collection.delete_one({"_id": ObjectId(id)})
 return(f'Item {id} deleted.')
 return "Articol negăsit.') return
  • Interogarea „find_one()” va căuta un articol pe baza „id-ului” furnizat
  • Dacă elementul este găsit, acesta va fi șters prin interogarea „delete_one()” și va returna „Id-ul articolului șters”
  • Dacă articolul nu este disponibil, va fi afișat „Articol negăsit”.

Adăugarea rutelor pentru operațiuni CRUD

      În acest moment, am creat funcții asincrone pentru operarea CRUD cu FastAPI. Acum să creăm ruta sau punctul final pentru fiecare operațiune. Editați fișierul „ server/routes/item.py ” folosind editorul preferat.

server/routes/item.py

Mai întâi, adăugați modulele „ APIRouter ” și „ Corps ” din „fastapi”. Apoi, adăugați „ jsonable_encode ” din „fastapi.encoders”.

from fastapi import APIRouter, Body 
from fastapi.encoders import jsonable_encoder

Importați fiecare funcție din fișierul „database.py”.

from server.database import ( 
add_item, 
get_items, 
get_item, 
change_item, 
delete_item, 
)

Importați modelele „Item” și „ItemUpdate” din fișierul „itemModels.py”.

from server.models.itemModels import ( 
Item, 
ItemUpdate, 
)

Apelați clasa „APIRouter” prin variabila „router”.

router = APIRouter()

Traseu pentru adăugarea unui articol nou

          Acum să adăugăm o rută pentru adăugarea de elemente noi. În acest exemplu, puteți adăuga un nou articol prin POST la adresa URL „ /item ”.

Adăugați următoarele linii pentru a configura rute pentru adăugarea de elemente noi. Fiecare POST către adresa URL rădăcină a articolului va fi tratată ca inserare date noi.

# add new item operation 
@router.post("/") 
async def add_item_data(item: Item = Body(...)): 
item = jsonable_encoder(item) 
new_item = await add_item(item) 
return new_item
  • Funcția „add_item_data” acceptă schema „Articol”, care va face parte din „Corps” la cererea dvs.
  • Articolul dvs. va fi convertit în format de dicționar prin „jsonable_encoder”
  • Introduceți datele din dicționar prin funcția „add_item” (consultați database.py) deasupra variabilei „new_item”
  • Returnați datele introduse „new_item” ca răspuns

Traseu pentru a obține toate articolele

Adăugați următorul script pentru a configura o rută pentru preluarea datelor. Fiecare solicitare GET către adresa URL a elementului rădăcină va prelua toate datele dvs.

# obține toate articolele disponibile 
@router.get("/") 
asincron def get_item_data(): 
items = await get_items() 
if items: 
return items 
return "Niciun articol disponibil."
  • Creați funcția „get_item_data” care va executa funcția „get_item” din fișierul „database.py”
  • Dacă articolele sunt disponibile, veți primi lista tuturor articolelor dvs
  • Dacă nu există niciun articol, veți primi răspunsul „Niciun articol disponibil”.

Traseu pentru a obține un articol specific

        Pentru a obține detalii despre un anumit articol, vom folosi „id” ca selector. Fiecare cerere GET către „/id” va returna un articol detaliat al „id-ului” solicitat.

# Afișați detaliile articolului prin ID-ul 
@router.get("/{id}") 
asincron def get_item_details(id): 
item_details = await get_item(id) 
if item_details: 
return item_details 
return "Articol nu a fost găsit."
  • Funcția „get_item_details” va fi creată și va transmite „id” de la adresa URL
  • Funcția „get_item” (vezi database.py) va fi apelată și va trece, de asemenea, „id” ca argument
  • Dacă articolul este găsit, vor fi afișate detaliile articolului
  • Dacă niciun articol cu ​​acel „id” specific, veți primi „Articol nu a fost găsit”

Rută pentru actualizarea unui articol

         Copiați următorul cod pentru a seta ruta pentru elementul actualizat:

# Update Item 
@router.put("/{id}") 
asincron def update_item(id: str, data: ItemUpdate = Body(...)): 
data = {k:v for k, v in data.dict().items() if v is not None} 
updated_item = await change_item(id, data) 
if updated_item} 
return: {f'item} 
return. "Eroare"
  • Funcția „update_item” va lua două argumente, „id” ca selector și „data”, care se bazează pe modelul „ItemUpdate”
  • Datele vor fi verificate în variabila „date”.
  • „updated_item” va executa funcția „change_item” din fișierul „database.py”
  • Dacă actualizarea a reușit, veți vedea rezultatul „Succes”

Rută pentru ștergerea unui articol

       Introduceți următoarele rânduri pentru a crea funcția „remove_item” pentru ștergerea articolelor. Fiecare operație DELETE la un anumit „/id” va elimina elementul potrivit cu „id”.

# ștergeți elementul prin id 
@router.delete("/{id}") 
asincron def remove_item(id): 
item_to_delete = await delete_item(id) 
if item_to_delete: 
return item_to_delete 
return{f'Item {id} Nu este disponibil.'}
  • Funcția „remove_item” va executa „delete_item” și va trece selectorul „id”
  • Operația de ștergere va fi stocată și executată prin variabila „item_to_delete”.
  • Când un articol nu este disponibil, veți primi returnarea „Id articol nu este disponibil”

server/app.py

  • Acum că ați terminat fișierul „server/routes/item.py”, să-l includem în „server/app.py”.
  • Deschideți fișierul „ app.py ” folosind editorul de text.
  • Importați „routerul” din fișierul „ server/routes/item.py ” ca „ ItemRouter ”.
de la server.routes.item import router ca ItemRouter

Introduceți „ItemRouter” cu prefixul implicit „ /item ”. Operațiunile CRUD vor fi gestionate prin adresa URL „ /item ”.

app.include_router(ItemRouter, tags="["Articol"], prefix="/item")

Acum punctul final CRUD va fi disponibil la următoarele:

  • Adăugați un articol nou: POST la „ /item ”
  • Preluați toate articolele: GET la „ /item ”
  • Preluați un anumit articol: GET la „/item/id” . „ID” este generat de MongoDB
  • Actualizați elementul: PUT la „/item/id”
  • Ștergeți elementul: DELETE în „/item/id”

Testați operațiunile CRUD

În primul rând, asigurați-vă că proiectul dvs. FastAPI rulează sau puteți executa scriptul „main.py” în felul următor:

python3 main.py

Navigați prin http://SERVERIP:8080/docs  și veți vedea fiecare rută pe care ați creat-o.

Mai jos este un exemplu de adăugare a unui articol nou.

Preluați toate articolele disponibile prin API.

Preluați anumite elemente prin selectorul „id”.

Actualizați datele parțiale din anumite articole.

Mai jos sunt datele actualizate.

Mai jos este operația de ștergere prin selectorul „id”.

[mai mult...]