DAY 77 luffy01

1 pip换源
2 虚拟环境(配置:新机器配一次)
workon 虚拟环境名字
   mkvirtualenv -p python3 虚拟环境名称
   deactivate
3 项目目录调整
"""
├── luffyapi
├── logs/ # 项目运行时/开发时日志目录 - 包
  ├── manage.py # 脚本文件
  ├── luffyapi/     # 项目主应用,开发时的代码保存 - 包
    ├── apps/     # 开发者的代码保存目录,以模块[子应用]为目录保存 - 包
      ├── libs/     # 第三方类库的保存目录[第三方组件、模块] - 包
  ├── settings/ # 配置目录 - 包
├── dev.py   # 项目开发时的本地配置
└── prod.py # 项目上线时的运行配置
├── urls.py   # 总路由
└── utils/     # 多个模块[子应用]的公共函数类库[自己开发的组件]
  └── scripts/       # 保存项目运营时的脚本文件 - 文件夹
"""

# 整个项目的启动是依据配置文件启动
# 如果把某个路径加入了环境变量
# 再导入包,直接从环境变量开始导起

 

1 项目生成requirements.txt

1 项目的依赖,以后标准,每个项目都必须有,包括脚本项目
2 直接手写requirements.txt,放在项目根路径下
3 自动生成
-pip3 freeze >requirements.txt

 

2 后台本地化配置

# 在配置文件中改
LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = False

 

3 数据库配置

1 使用mysql数据库,建一个库,给开发人员分配一个开发用户
2 创建luffy库
-使用navicate创建库
   -使用命令
  -create database luffy default charset=utf8;
       
       
3 创建用户,授予权限
-查看有那些用户
   select user,host,password from mysql.user;
   -创建luffy用户,授予luffy库的所有权限
# 授权账号命令:grant 权限(create, update) on 库.表 to '账号'@'host' identified by '密码'
   grant all privileges on luffy.* to 'luffy'@'%' identified by 'Luffy123?';
   grant all privileges on luffy.* to 'luffy'@'localhost' identified by 'Luffy123?';
   flush privileges;
   
   
4 django配置
-在配置文件中配置
       'default': {
       'ENGINE': 'django.db.backends.mysql',
       'NAME': 'luffy',
       'USER': 'luffy',
       'PASSWORD': 'Luffy123?',
       'HOST': 'localhost',
       'PORT': 3306
  }
   -密码容易被人看到(写到环境变量中)
   password=os.getenv('db_password','Luffy123?')
   print(password)
   DATABASES = {
       # }
       'default': {
           'ENGINE': 'django.db.backends.mysql',
           'NAME': 'luffy',
           'USER': 'luffy',
           'PASSWORD': password,
           'HOST': 'localhost',
           'PORT': 3306
      }
  }
   
5 安装pymysql,或者是mysqlclient
-运气好:一把装好就用mysqlclient
  -pip3 install mysqlclient
  -或者使用pymysql(django版本超过2.0.7,需要改源码)
  -在配置文件中加入
       import pymysql
pymysql.install_as_MySQLdb()

 

4 User表编写,开启media

http://www.liuqingzheng.top/python/%E8%B7%AF%E9%A3%9E%E9%A1%B9%E7%9B%AE/1-%E9%A1%B9%E7%9B%AE%E5%9F%BA%E7%A1%80/6-user%E6%A8%A1%E5%9D%97User%E8%A1%A8/

 

5 前台项目创建及配置

1 vue create luffycity
2 使用pycharm打开
3 项目配置:
-element-ui(样式)
   -axios(请求)
   -vue-router(路由)
   -vuex (状态管理器)
   
   
   -vue-cookies
   -vue-video(暂时没装)
   -bootstarp(咱们不用)
   -jq(咱们也不用)
   
4 vue-router组件(单页面开发,组件之间跳转)
-在根组件App.vue中加入
  <router-view/>
-在router下的index.js中配置路径
      {
       path: '/',
       name: 'Home',
       component: Home
  }
   -在浏览器里输入相应的路径,就能显示相应的组件
   -在页面中跳转
   <router-link to="/">Home</router-link>
   


5 使用element-ui
-cnpm install  element-ui --save
   -在main.js中配置
   import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
   Vue.use(ElementUI);
   -在官方文档找到好看的组件,之间把html,css,js拷入自己项目即可

6 使用axios
-cnpm install  axios --save
   -main.js配置
   import axios from 'axios'
Vue.prototype.$http=axios
   -以后在组件中直接
  this.$http.get().then(res=>{})
7 使用vue-cookies(js操作cookie)
-cnpm install vue-cookies -S
   -main.js配置
   import cookies from 'vue-cookies'
Vue.prototype.$cookies = cookies;
-在组件中使用
   this.$cookies.set('token','asdfasdf')
8 使用bootstrap,jq
-安装
cnpm install jquery
cnpm install bootstrap@3
   -main.js中配置
   import 'bootstrap'
import 'bootstrap/dist/css/bootstrap.min.css'
-在项目根路径创建vue.config.js,写入
       const webpack = require("webpack");
       module.exports = {
           configureWebpack: {
               plugins: [
                   new webpack.ProvidePlugin({
                       $: "jquery",
                       jQuery: "jquery",
                       "window.jQuery": "jquery",
                       "window.$": "jquery",
                       Popper: ["popper.js", "default"]
                  })
              ]
          }
      };

6 跨域问题

https://www.cnblogs.com/liuqingzheng/articles/9794285.html
   
1 浏览器的同源策略(浏览器最基本的安全策略)
-只能接收相同域(地址+端口)返回的数据
2 向不同域发请求,就会出现跨域问题(浏览器阻止了)
-CORS(跨域资源共享:后端技术),主流采用的方案
   -前端代理(只能在测试阶段使用)
   -jsonp:只能解决get请求跨域,本质原理使用了某些标签不限制跨域
   
3 跨域
-简单请求:简单请求只发一次
   -非简单请求:发送两次,第一次是options请求,第二次是真正的请求
   
   -只要满足以下,就是简单请求
   (1) 请求方法是以下三种方法之一:
       HEAD
       GET
       POST
    (2)HTTP的头信息不超出以下几种字段:
       Accept
       Accept-Language
       Content-Language
       Last-Event-ID
       Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
4 解决跨域问题
-简单请求:
  在响应头中添加
   -非简单请求需要判断是否是options请求
5 解决方案:在中间件中写,(不要忘了注册)
class CORSMiddleWare(MiddlewareMixin):
   def process_response(self, request, response):
       if request.method == 'OPTIONS':
           response['Access-Control-Allow-Headers'] = '*'
       response['Access-Control-Allow-Origin'] = '*'

       return response
   
   
6 第三方已经写好了,直接安装,配置即可
-1 安装pip install django-cors-headers

   -2 在app中注册
  'corsheaders',
   -3 在中间件注册
  'corsheaders.middleware.CorsMiddleware',
   -4 在配置文件中写
  CORS_ALLOW_CREDENTIALS = True
       CORS_ORIGIN_ALLOW_ALL = True

       CORS_ALLOW_METHODS = (
           'DELETE',
           'GET',
           'OPTIONS',
           'PATCH',
           'POST',
           'PUT',
      )

       CORS_ALLOW_HEADERS = (
           'authorization',
           'content-type',

      )
   
       

补充

1 反向生成models
python manage.py inspectdb > models.py
原文地址:https://www.cnblogs.com/DEJAVU888/p/14893873.html