django的基本流程

1、创建django项目

  1. 打开pycharm-->

    选择new project,出现下面的对话框。

  2. 示例图

2、Django将自动生成下面的目录结构

  1. 说明

    当点击create之后,等待安装完成之后会创建如下项目结构

  2. 示例图

3、创建app

  1. 说明

    在每个Django项目中可以包含多个APP,相当于一个大型项目中的分系统、子模块、功能部件等等,相互之间比较独立,但也可以有联系。所有的APP共享项目资源。

  2. 示例图

4、注册app

  1. 说明

    通过命令创建的app,都必须注册,注册方式在项目根目录下的settings.py文件中

  2. 示例图

5、编写views.py

  1. 说明

    业务处理逻辑都在views.py文件里。

  2. 示例图

6、编写路由

  1. 说明

    路由都在urls文件里,它将浏览器输入的url映射到相应的业务处理逻辑。简单的urls编写

  2. 示例图

7、启动

  1. 说明

    可以通过命令行启动,也可以使用pycharm工具来启动

  2. 命令行启动

     # 默认 127.0.0.1:8000
    python manage.py runserver
    # 也可以使用指定的ip地址加端口
    python manage.py runserver 0.0.0.0:8000
    
  3. pycharm启动

    然后点击三角箭头运行,或者点击小昆虫采用debug运行

  4. 在浏览器输入http://127.0.0.1:8000/index/

8、返回HTML文件

  1. 说明

    通常我们都是将HTML文件返回给用户。而不是一个简单的字符串

  2. 示例图

9、使用静态文件

  1. 说明

    到目前为止,我们能返回一个html界面给用户了,但html可能会包含js,css文件。在django中,一般将静态文件放在static目录中。接下来,在项目的根目录下新建个static目录,我们的js,css,img和各种插件都可以放置在这个目录里。

  2. 示例图

  3. 为了让django找到这个目录,我们需要对settings进行配置

  4. 在Html文件中使用静态文件

  5. 访问静态资源配置

10、返回动态页面

  1. 说明

    django有自己的模板语言,类似jinja2,根据提供的数据,替换掉HTML中的相应部分,详细的入门语法后期再讲

  2. 在views.py中

  3. 在template/index.html中

  4. 在浏览器显示

11、与数据库结合

  1. 说明

    通过上面的案例,开发中常用的一些操作和基本流程我们已经走完,接下来就是最重要的一块,与数据库交互

    Django通过自带的ORM框架操作数据库。

  2. settings中,配置数据库相关的参数,如果使用自带的sqlite,不需要修改。

  3. 编辑models.py文件,也就是MTV中的M

  4. 在pycharm的teminal中通过命令生成迁移文件

    python manage.py makemigrations hello
    

  5. 在pycharm的teminal中通过命令生成数据库表

    python manage.py migrate
    

  6. 修改views.py

  7. 修改index.html

  8. 启动在浏览器查看

12、总结

以上是我们在开发中常用的一些步骤,

web框架的Django,它的功能强大,内容全面,但同时也意味着限制颇多,灵活性低,可修改性差,这就是鱼和熊掌不可兼得了。我们学习Django,要理解它的基本原理,把握它整体框架,牢记一些基本规则,剩下的就是不断深入细节,然后熟能生巧、经验多少的问题了,不存在多高深的不可掌握技术。

 

### RK3588平台NPU调用方法 #### 创建和初始化NPU环境 为了在RK3588平台上成功调用NPU进行神经网络推理或加速,首先需要确保设备已正确配置并加载了相应的驱动程序。Rockchip的官方固件通常已经预装了RKNPU驱动[^3]。 一旦确认硬件准备就绪,可以通过以下方式创建和初始化NPU环境: ```cpp #include "rknn_api.h" // 初始化模型路径和其他参数 const char* model_path = "./model.rknn"; int ret; rknn_context ctx; ret = rknn_init(&ctx, model_path, 0, 0, NULL); if (ret < 0) { printf("Failed to initialize rknn context\n"); } ``` 这段代码展示了如何使用`rknn_api.h`库来初始化一个RKNN上下文对象,这一步骤对于后续的操作至关重要[^2]。 #### 加载和编译模型 接下来,在实际运行之前还需要加载预先训练好的神经网络模型文件(通常是`.rknn`格式)。此过程涉及读取模型二进制数据,并将其传递给RKNN API以便内部处理和优化。 ```cpp // 假设模型已经被转换成 .rknn 文件格式 char *model_data; // 模型的数据指针 size_t model_size; // 模型大小 FILE *fp = fopen(model_path, "rb+"); fseek(fp, 0L, SEEK_END); model_size = ftell(fp); rewind(fp); model_data = (char *)malloc(sizeof(char)*model_size); fread(model_data, sizeof(unsigned char), model_size, fp); fclose(fp); // 将模型数据传入RKNN API ret = rknn_load_rknn(ctx, &model_data, &model_size); free(model_data); if(ret != 0){ printf("Load Model Failed!\n"); } else{ printf("Model Loaded Successfully.\n"); } ``` 这里说明了从磁盘读取模型文件的具体操作流程,并通过API函数将这些信息提交给了底层框架去解析和设置好用于推断所需的资源[^1]。 #### 执行前向传播计算 当一切准备工作完成后就可以开始真正的预测工作——即让NPU执行一次完整的前向传播运算。这个阶段主要是构建输入张量、启动异步任务以及收集输出结果。 ```cpp float input_tensor[INPUT_SIZE]; // 输入特征图数组 float output_tensors[MAX_OUTPUTS][OUTPUT_SIZE]; // 输出特征图数组 struct rknn_input inputs[] = {{input_tensor}}; struct rknn_output outputs[MAX_OUTPUTS]; for(int i=0;i<NUM_ITERATIONS;++i){ memset(inputs, 0 ,sizeof(struct rknn_input)); memcpy(input_tensor, inputData[i], INPUT_SIZE*sizeof(float)); // 启动推理任务 ret = rknn_run(ctx, nullptr); if(ret!=0){ printf("Inference failed at iteration %d", i); break; } // 获取输出结果 for(size_t j=0;j<num_outputs;++j){ struct rknn_output& out = outputs[j]; size_t bufSize = OUTPUT_SIZE * sizeof(float); void* buffer = malloc(bufSize); ret = rknn_get_output(ctx, j, &out.datatype, &buffer, &bufSize, false); if(!ret && buffer){ memcpy(output_tensors[j], buffer, bufSize); free(buffer); } } } printf("All iterations completed successfully."); ``` 上述片段体现了典型的基于RKNN SDK的应用场景:先准备好待测样本作为输入;接着触发内核中的计算逻辑;最后获取到经过变换后的响应值供下一步分析所用[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值