项目依赖模块解决、二次封装Response、后台数据库配置、user模块user表设计、前台创建及配置
今日内容概要
- 二次封装Response
- 后台数据库配置
- user模块user表设计
- 前台创建及配置
内容详细
补充--项目依赖模块
# 导出项目依赖模块和安装项目依赖模块
	第三方模块---》导出来---》项目路径下--》requirements.txt
	第三方模块名字和版本
	pip freeze >requirements.txt  # 会生成一个文本 内容都是模块与版本号
	pip3 install -r requirements.txt  # 执行后 会将文件中所有模块及指定版本装上

1、二次封装Response
# drf有个Response类
	data=None,   {'status':100,'msg':'成功','token':asedfasfd3a21}
	status=None,
	template_name=None,
	headers=None,
	exception=False,
	content_type=None
## 代码演示:
from rest_framework.response import Response
class APIResponse(Response):
    def __init__(self, status=100, msg='成功', http_status=None, template_name=None, headers=None, exception=False,
                 content_type=None, **kwargs):
        data = {
            'status': status,
            'msg': msg
        }
        if kwargs:
            data.update(kwargs)  # 这句话什么意思?{token:adfads,name:asdfa}
        super().__init__(data=data, status=http_status, template_name=template_name, headers=headers,
                         exception=exception, content_type=content_type)
# res = APIResponse(token='asdfadsf')  # -->{status:100,msg:成功,token:asdfadsf}
# res = APIResponse(result=[{}, {}, {}])  # -->{status:100,msg:成功,result:[{},{},{}]}
# res = APIResponse(status=101, msg='失败')  # -->{status:101,msg:失败}
# res = APIResponse(status=101, msg='失败', http_status=201)  # -->{status:101,msg:失败}
2、后台数据库配置
# 使用mysql---》创建一个库(手动)--》库名:luffy
# 项目配置文件中,连接这个数据库(Navicat创建一样)
# 创建数据库,并配置
	create database luffy default charset=utf8;
# 给数据库创建一个普通用户,它只能操作luffy库
## 创建用户
	授权账号命令:grant 权限(create, update) on 库.表 to '账号'@'host' identified by '密码'
	grant all privileges on luffy.* to 'lqz'@'%' identified by 'Luffy123?';
	grant all privileges on luffy.* to 'lqz'@'localhost' identified by 'Luffy123?';
## 刷新权限
flush privileges;
# 查看用户
	5.7之前版本
	select user,host,password from mysql.user;
	5.7往后的版本
	select user,host,authentication_string from mysql.user;
## 项目配置文件修改:
DATABASES = {
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    # }
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'luffy',  # 数据库名字
        'USER': 'lqz',  # 用户名
        'PASSWORD': 'Luffy123?',
        'HOST': 'localhost',
        'PORT': 3306
    }
}
### django操作mysql
	模式使用MysqlDB来操作---》MysqlDB在python3.x以后不存在了
	使用pymysql替换---》django2.0.7版本及以上,如果使用pymysql替换,需要改django源码
### 关于 pymysql和 mysqlclient的选择
	通过pymysql操作数据库需要加入下面两句话:
		import pymysql
		pymysql.install_as_MySQLdb()
	这两句话,只要执行即可,放在那里都行---》只要django执行,所有py文件中顶格写的代码都会执行 也可以直接写在配置文件中
	但是需要改源码才可以运行项目 如果改源码,后期只要使用django,都要改它的源码
	所以咱们换另一个操作mysql的模块 -- mysqlclient
	win上安装最好不要装最新版(很可能安装失败) 可以尝试降版本安装或者参考一下博文:
		http://www.liuqingzheng.top/python/%E5%85%B6%E4%BB%96/01-%E5%90%84%E4%B8%BB%E6%B5%81Linux%E7%B3%BB%E7%BB%9F%E8%A7%A3%E5%86%B3pip%E5%AE%89%E8%A3%85mysqlclient%E6%8A%A5%E9%94%99/
#### 使用mysqlclient不需要写两句话,不用改源码
3、user模块user表设计
# 用户板块---》做成app
	python ../../manage.py startapp user	
# 创建用户表,基于auth的user表扩写
	注意:在写好这个之前,不要先迁移数据,如果迁移了数据库,这个就不行了
	如果你已经迁移了,删除数据库,删除所有的migrations文件,包含你自己的app,和auth和admin这两个app
### 在 models.py中:
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
    mobile = models.CharField(max_length=11, unique=True)  # 唯一,长度11
    # 需要pillow包的支持 ImageField继承自FileField
    icon = models.ImageField(upload_to='icon', default='icon/default.png')
    class Meta:
        db_table = 'luffy_user'
        verbose_name = '用户表'
        verbose_name_plural = verbose_name
    def __str__(self):
        return self.username
### 配置文件添加:
INSTALLED_APPS = [
    'user'
]
### 把扩写了auth的user表注册一下
AUTH_USER_MODEL = 'user.User'
# 配置media文件夹
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# 安装pillow ,迁移数据库
pip install pillow
python manage.py makemigrations
python manage.py migrate
4、前台创建及配置
# cmd窗口创建项目:
	vue create luffycity
	使用pycharm打开
# 删除一些东西
### 保留 router/index.js 为:
import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '../views/HomeView.vue'
Vue.use(VueRouter)
const routes = [
  {
    path: '/',
    name: 'home',
    component: HomeView
  },
]
const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})
export default router
### 保留 views/HomeView.vue 为:
<template>
  <div class="home">
    <h1>首页</h1>
  </div>
</template>
<script>
export default {
  name: 'HomeView',
  components: {
  }
}
</script>
### 保留 App.vue 为:
<template>
  <div id="app">
    <router-view/>
  </div>
</template>
### elementui ,bootstrap,jquery,axios配置:
	# axios
		cnpm install axios  -S
	## main.js
		import axios from 'axios'
		Vue.prototype.$axios = axios;
	# elementui
		cnpm install element-ui -S
	## main.js
		import ElementUI from 'element-ui';
		import 'element-ui/lib/theme-chalk/index.css';
		Vue.use(ElementUI);
	# bootstrap和jq
		cnpm install jquery -S
		cnpm install bootstrap@3 -S
	## vue.config.js
const {defineConfig} = require('@vue/cli-service')
const webpack = require("webpack")
module.exports = defineConfig({
    transpileDependencies: true,
    configureWebpack: {
        plugins: [
            new webpack.ProvidePlugin({
                $: "jquery",
                jQuery: "jquery",
                "window.jQuery": "jquery",
                "window.$": "jquery",
                Popper: ["popper.js", "default"]
            })
        ]
    }
})
	## main.js
		import 'bootstrap'
		import 'bootstrap/dist/css/bootstrap.min.css'
	# 全局css样式配置
	## 新建:assets/css/global.css
/* 声明全局样式和项目的初始化样式 */
body, h1, h2, h3, h4, h5, h6, p, table, tr, td, ul, li, a, form, input, select, option, textarea {
    margin: 0;
    padding: 0;
    font-size: 15px;
}
a {
    text-decoration: none;
    color: #333;
}
ul {
    list-style: none;
}
table {
    border-collapse: collapse; /* 合并边框 */
}
	## main.js
		// 把自己定义的global.css 引入
		import './assets/css/global.css'
	# 配置文件配置
	## 新建:assets/js/settings.js
export default {
    base_url: "http://127.0.0.1:8000"
}
	# main.js
		// 导入自定义配置
		import settings from './assets/js/settings'
		Vue.prototype.$settings = settings;

项目依赖模块解决、二次封装Response、后台数据库配置、user模块user表设计、前台创建及配置的更多相关文章
- drf序列化高级、自定义只读只写、序列化覆盖字段、二次封装Response、数据库查询优化(断关联)、十大接口、视图家族
		目录 自定义只读 自定义只写 序列化覆盖字段 二次封装Response 数据库关系分析 断外键关联关系 ORM操作外键关系 ORM四种关联关系 基表 系列化类其他配置(了解) 十大接口 BaseSer ... 
- 3.后台配置、环境变量、日志、异常处理、二次封装Response、路由组件
		目录 环境变量 封装logger 封装项目异常处理 二次封装Response模块 路由组件配置 环境变量 dev.py # 环境变量操作:小luffyapiBASE_DIR与apps文件夹都要添加到环 ... 
- Django(53)二次封装Response
		前言 有时候我们使用drf的Response,会发现默认返回的格式不太友好,每次我们都需要写入以下的格式 return Response({ "status": 0, " ... 
- DRF框架(五)——context传参,二次封装Response类,两个视图基类(APIView/GenericAPIView),视图扩展类(mixins),子类视图(工具视图),视图集(viewsets),工具视图集
		复习 1.整体修改与局部修改 # 序列化get (给前端传递参数) #查询 ser_obj = ModelSerializer(model_obj) #只传递一个参数,默认是instance的参数,查 ... 
- 二次封装Response类 | 视图类传递参数给序列化类context
		二次封装Response类 源码: class Response(SimpleTemplateResponse): """ An HttpResponse that al ... 
- 【maven】maven查看项目依赖并解决依赖冲突的问题
		一.问题 项目开发过程中,经常会遇到jar冲突,然后maven根据自己的规则进行冲突解决,导致项目在运行的过程中报错. 1.maven自动解决依赖冲突的规则是什么? 2.如何查看当前项目的maven的 ... 
- sell 项目  订单详情表 设计 及 创建
		1.数据库设计 2.订单详情表 创建 /** * 订单详情表 */ create table `order_detail` ( `detail_id` varchar(32) not null, `o ... 
- sell 项目  订单表 设计 及 创建
		1.数据库设计 2.订单表 创建 /** * 订单表 */ create table `order_master` ( `order_id` varchar(32) not null, `buyer_ ... 
- sell 项目 类目表 设计 及 创建
		1.数据库设计 2.类目表 创建 /** * 类目表 */ create table `product_category` ( `category_id` int not null auto_incr ... 
随机推荐
- 2、DTO(数据传输对象)
			DTO:Data Transfer Object 即数据传输对象. 有些人会问这个DTO是干嘛的,不是已经有了Model实体类了么? 首先说一下,DTO是干嘛了.DTO的引入,应该说是伴随着分层架构设 ... 
- Mybatis入门实例解析
			写在前面:本文全程根据Mybatis官网进行入门讲解.毫无疑问,官方文档是学习这门技术最权威的资料,与此同时我们也知道官方文档对待入门小白基本上不太友好,没有入门demo.开篇就是小白们不懂的内容.有 ... 
- 【vue】中英文切换(使用 vue-i18n )
			一.准备工作 1.vue-i18n 1.仓库地址 2.兼容性:支持 Vue.js 2.x 以上版本 1-1.安装依赖vue-i18n (c)npm install vue-i18n 1-2.使用 在 ... 
- Python -用虚拟环境保存库文件
			如果你同时负责多个 Python 项目,或者想要轻松打包某个项目及其关联的库文件,再或者你担心已安装的库之间可能有冲突,那么你可以安装一个 Python 虚拟环境来分而治之.当一个 Python 库不 ... 
- 如何选择 Linux 操作系统版本?
			一般来讲,桌面用户首选 Ubuntu :服务器首选 RHEL 或 CentOS ,两者中首选 CentOS .根据具体要求:· 安全性要求较高,则选择 Debian 或者 FreeBSD .· 需要使 ... 
- 创建自定义ClassLoader,绕过双亲委派
			1.什么是类加载 通过javac将.java文件编译成.class字节码文件后,则需要将.class加载到JVM中运行,哪么是谁将.class加载到JVM的呢?那就是类加载器啦. 2.类加载器类型 B ... 
- 关于CPU、指令集、架构、芯片的一些科普
			作者:王强链接:https://zhuanlan.zhihu.com/p/19893066来源:知乎 随着智能设备的广泛普及,这几年媒体上越来越多的出现关于"架构""AR ... 
- 安装TypeScript
			安装TypeScript 创建工程文件夹:mkdir <project folder> 进入工程文件夹:cd <project folder> 快速创建程序包:npm init ... 
- 对Flex布局的总结与思考
			阅读本文之前最好对flex布局有基本了解,可以通过"参考资料"中列举的资源来学习. flex布局规范的设计目标 一维布局模型(one-dimensional layout mode ... 
- sticker-footer 布局
			sticker-footer 1.嵌套层级不深,可直接继承自 body width:100%: height:100%; // html <body> <div id="s ... 
 
			
		