Python Web全栈工程师「慕ke」

288 阅读6分钟

Python Web全栈工程师

讠果☛ ukoou.com/resource/1414

Flask、django 框架介绍

Flask 是一个轻量级的 Web 框架,使用 Python 语言编写,较其他同类型框架更为灵活、轻便且容易上手,小型团队在短时间内就可以完成功能丰富的中小型网站或 Web 服务的实现。

Flask 具有很强的定制性,用户可以根据自己的需求来添加相应的功能,在保持核心功能简单的同时实现功能的丰富与扩展,其强大的插件库可以让用户实现个性化的网站定制,开发出功能强大的网站。 Flask 是一个 Python 实现的 Web 开发微框架,但是这个“微”并不代表着 Flask 功能比较简陋、有所欠缺。微框架中的 “微” 意味着:

  • Flask 旨在保持核心简单而易于扩展;
  • Flask 不会替用户做出太多决策,比如使用何种数据库;
  • Flask 的选项(比如使用何种模板引擎) 通常有多个,用户很容易替换。

Flask 与 Django 的比较 两个框架的区别

其实两者最主要区别在于:Django 功能大而全,Flask 只包含基本的功能。

Django 采用一站式解决的思路,Django 集成有模板、表单、路由、认证、基本的数据库管理等内建功能,开发者不用在选择应用的基础设施上花费大量时间。

Django 就像是一个装潢好的房子,它提供了各种家具,直接入住即可。

Flask 相对于 Django 而言是轻量级的 Web 框架。和 Django 不同,Flask 只提供了最核心的功能,轻巧、简洁,通过定制第三方扩展来实现具体功能。

默认情况下,不包含数据库抽象、用户认证、表单验证、发送邮件等其它 Web 框架经常包含的功能。Flask 依赖用各种灵活的扩展(比如邮件 Flask Mail,用户认证 Flask Login,数据库 Flask SQLAlchemy)来给Web应用添加额外功能。

Flask 就像是一个没有装潢的房子,用户需要自己选择各种家具才可以入住。

Python Web全栈工程师 - DRF 概述及环境安装

核心思想: 缩减编写api接口的代码

Django REST framework是一个建立在Django基础之上的Web 应用开发框架,本质上就是一个内置在django里面的子应用,可以快速的开发REST API接口应用。

在REST framework中,提供了序列化器对象Serializer的定义,可以帮助我们简化序列化与反序列化的过程,不仅如此,还提供丰富的类视图、扩展类、视图集来简化视图的编写工作。REST framework还提供了认证、权限、限流、过滤、分页、接口文档等功能支持。REST framework提供了一个用于测试API接口 的可视化Web界面【可以浏览器直接访问接口,drf的api接口测试页面非常美观】。

安装DRF(使用虚拟环境)

前提是已经安装了django,建议安装在虚拟环境

windows的复制粘贴在linux终端是无效的,在ubuntu终端下粘贴的快捷键是 shift+insert

# mkvirtualenv drfdemo -p python3
# pip install django==2.2.0  -i https://pypi.douban.com/simple

# pip install djangorestframework -i https://pypi.douban.com/simple

# 因为我们需要接下来,需要开发api接口肯定要操作数据,所以安装pymysql
pip install pymysql -i https://pypi.douban.com/simple

2.1.1 创建django项目

cd ~/Desktop
django-admin startproject drfdemo

 如果退出终端,想再次进入虚拟环境:

moluo@ubuntu:~$ workon
drfdemo
moluo@ubuntu:~$ workon drfdemo
(drfdemo) moluo@ubuntu:~$ 

使用pycharm打开项目,设置虚拟环境的解析器(把项目解释器改为之前创建的虚拟环境),补充修改项目端口另一种方式,先运行manage.py,之后右上角修改manage.py中的后缀参数。

 打开项目运行时,发现manage.py文件中import sys飘红,这个不用管

2.2 注册rest_framework应用

settings.pyINSTALLED_APPS中添加'rest_framework'。

INSTALLED_APPS = [
    ...
    'rest_framework',
]

接下来就可以使用DRF提供的功能进行api接口开发了。在项目中如果使用rest_framework框架实现API接口,主要有以下三个步骤:

  • 将请求的数据(如JSON格式)转换为模型类对象
  • 通过模型类对象进行数据库操作,完成客户端请求的增删查改
  • 将模型类对象转换为响应的数据(如JSON格式)

Python Web全栈工程师 - vue导航菜单栏接口数据渲染

在Vue.js中,导航菜单栏(通常称为侧边栏或侧导航)的接口数据渲染涉及到几个关键步骤:获取接口数据、处理数据以构建菜单结构、以及使用Vue组件和指令来渲染菜单。以下是一个基本的流程,展示了如何在Vue应用中实现这一过程:

步骤 1: 获取接口数据

首先,你需要从后端接口获取菜单数据。这通常通过HTTP请求来完成。你可以使用axiosfetch或其他HTTP库来发送请求。

// 使用axios发送GET请求获取菜单数据
import axios from 'axios';

async function fetchMenuData() {
  try {
    const response = await axios.get('/api/menu');
    return response.data; // 假设后端返回的数据格式是{ data: [{...}] }
  } catch (error) {
    console.error('Error fetching menu data:', error);
    return [];
  }
}

步骤 2: 处理数据构建菜单结构

获取到数据后,你需要将其处理成适合Vue渲染的格式。通常,菜单数据会包含层级结构,每个菜单项可能包含子菜单。

// 假设fetchMenuData返回的是一个对象数组,每个对象包含id, title, url等属性
const menuData = fetchMenuData();

// 处理数据,构建菜单结构
function buildMenuStructure(data) {
  return data.map(item => ({
    ...item,
    children: item.children ? buildMenuStructure(item.children) : []
  }));
}
const menuStructure = buildMenuStructure(menuData);

步骤 3: 使用Vue组件渲染菜单

在Vue组件中,你可以使用v-for指令来遍历菜单结构并渲染每个菜单项。

<template>
  <ul>
    <li v-for="item in menuStructure" :key="item.id">
      <router-link :to="item.url">{{ item.title }}</router-link>
      <ul v-if="item.children.length">
        <li v-for="child in item.children" :key="child.id">
          <router-link :to="child.url">{{ child.title }}</router-link>
        </li>
      </ul>
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      menuStructure: []
    };
  },
  created() {
    this.menuStructure = buildMenuStructure(fetchMenuData());
  }
};
</script>

在这个例子中,我们使用了<router-link>组件来处理路由导航,这是Vue Router提供的一个组件,它可以生成一个<a>标签,其href属性被设置为Vue Router的路由路径。

步骤 4: 样式和交互

你可能还需要为菜单添加样式,并处理一些交互逻辑,比如点击菜单项时的高亮显示、子菜单的展开和收起等。这些可以通过CSS类和Vue的事件处理器来实现。

/* 样式示例 */
ul {
  list-style: none;
  padding: 0;
}
li {
  margin: 5px 0;
}
router-link-active {
  font-weight: bold;
}
// Vue组件中的事件处理器示例
methods: {
  toggleSubMenu(index) {
    // 切换子菜单的展开和收起状态
  }
}