c语言之Linux网络开发

一、网络编程预备知识 socket IP地址 端口号 字节序 (一)socket 是一个编程接口 是一种特殊的文件描述符 (everything in Unix is a file) 并不仅限于TCP/IP协议 面向连接 (Transmission Control Protocol - TCP/IP) 无连接 (User Datagram Protocol -UDP 和 Inter-network Packet Exchange - IPX) (二)socket类型 1、流式套接字(SOCK_STREAM) 提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。 2、数据报套接字(SOCK_DGRAM) 提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。 3、原始套接字(SOCK_RAW) 可以对较低层次协议如IP、ICMP直接访问。 (三)socket的位置 (四)IP地址 IP地址是Internet中主机的标识: Internet中的主机要与别的机器通信必须具有一个IP地址 IP地址为32位(IPv4)或者128位(IPv6) 每个数据包都必须携带目的IP地址和源IP地址,路由器依靠此信息为数据包选择路由 表示形式:常用点分形式,如202.38.64.10,最后都会转换为一个32位的无符号整数 (五)端口号 为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理,使用端口号来区别 TCP端口号与UDP端口号独立 端口号一般由IANA (Internet Assigned Numbers Authority) 管理 众所周知端口:1~1023(1~255之间为众所周知端口,256~1023端口通常由UNIX系统占用) 注册端口:1024~49150 动态或私有端口:49151~65535 (六)字节序 不同类型CPU的主机中,内存存储多字节整数序列有两种方法,称为主机字节序(HBO): 小端序(little-endian) - 低序字节存储在低地址 将低字节存储在起始地址,称为“Little-Endi...

FastAPI后端篇之业务功能开发(一)

 一、业务功能简介

本项目主要是开发图书馆管理系统,所以设计的业务需求主要包含:

  • 作者功能开发
  • 出版社功能开发
  • 书籍功能开发
当然要完成上述的功能,还需要开发一些辅助功能,比如数据库依赖项、数据库操作工具集等。

二、功能开发

(一)数据库依赖项开发

       在FastAPI框架中操作数据库必然需要先得到一个数据库连接,这里得到数据库连接的方法也比较简单,通过依赖项的方式来进行获取。
  • 数据库会话配置 
       对数据库的增删改查会涉及到数据库的连接以及创建会话,所以在database.py文件中添加生成会话的代码:
... from sqlalchemy.orm import sessionmaker ... SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) ...
  • 数据据依赖项开发 
       通过上面的SessionLocal来生成db实例用来连接数据库进行增删改查的操作,在dependencies.py文件中:
from database import SessionLocal def get_db(): db = SessionLocal() try: yield db finally: db.close()
(二)作者功能开发

1、开发作者功能的API
  • 根据作者用户名查找作者信息
  • 创建一个作者信息
  • 获取所有作者的信息
2、请求与响应模型设计 

设计请求响应模型对用户发送的请求体以及服务器返回的响应体进行校验,在schemas.py文件中:
from pydantic import BaseModel, EmailStr from datetime import datetime from typing import Optional class AuthorBase(BaseModel): username: str # 请求体模型校验 class AuthorCreate(AuthorBase): email: EmailStr # 响应体模型校验 class Author(AuthorBase): id: int email: EmailStr class Config: orm_mode = True

3、工具类开发 

对用户提交的请求体进行操作,增删查改,在crud.py文件中:
from sqlalchemy.orm import Session import models, schemas from typing import List # 通过作者名字获取具体的信息 def get_author_by_username(db: Session, username: str): return db.query(models.Author).filter(models.Author.username == username).first() # 创建一个作者信息 def create_author(db: Session, author: schemas.AuthorCreate): db_author = models.Author(**author.dict()) db.add(db_author) db.commit() db.refresh(db_author) return db_author # 获取所有的作者信息 def get_all_author(db: Session): return db.query(models.Author).all()

4、创建视图函数 

在main.py文件中:
from fastapi import FastAPI, Depends, HTTPException import uvicorn import schemas, crud from sqlalchemy.orm import Session from dependencies import get_db from typing import List app = FastAPI() # 创建一个作者信息 @app.post("/author", response_model=schemas.Author) def create_author(author: schemas.AuthorCreate, db: Session = Depends(get_db)): db_author = crud.get_author_by_username(db, author.username) if db_author: raise HTTPException(status_code=400, detail="author already exists!") return crud.create_author(db, author) # 获取所有作者信息 @app.get("/authors", response_model=List[schemas.Author]) def get_all_authors(db: Session = Depends(get_db)): return crud.get_all_author(db) if __name__ == '__main__': uvicorn.run(app=app, host="127.0.0.1", port=8080)
启动后就可以直接访问了。


更多文章合集前往: 往期精彩文章

此博客中的热门博文

玩转虚拟机系列之如何搭建虚拟机

玩转虚拟机系列之远程工具

玩转虚拟机系列之如何高效创建虚拟机