IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Django前后台分离+部署笔记 -> 正文阅读

[Python知识库]Django前后台分离+部署笔记

后端篇

一。虚拟环境弄好
1、新建DTestPlatform文件夹? cd 到对应目录,
2、

python -m venv 虚拟环境名


3、输入命令cd Scripts,进入名为Scripts的文件夹
4、输入命令activate.bat 激活虚拟环境

1.新建项目(安装Django组件)
??? 新建Django项目,到指定的文件夹 DTestPlatform,选择虚拟环境来源指定为DTestPlatform中的python
??? 运行 Tools-manage.py
2.新建应用:
??? pycharm-Tools-manage.py 命令行中? 输入 startapp 应用名称,也可以新建项目的时候更多设置中指定
??? 或命令行

django-admin.py startapp aip_test


??? 修改项目配置文件,到settings.py里,
??????? 1.INSTALLED_APPS中,添加创建的应用名称
??????? 2.找到数据库的配置信息,DATABASES,默认是sqlite,全部删掉并替换为想要的数据库配置

        'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'aip_test_mysql',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'USER': 'root',   # 分别是数据库的用户名和密码
        'PASSWORD': 'mysql',


??????? 3.安装pymysql

pip install pymysql


??????? 4.设置数据库驱动默认为pymysql??? 在应用的的 __init__.py? 文件中添加
?

            import pymysql
            pymysql.install_as_MySQLdb()

3.在应用中设计数据库models
??? 1.到新建的应用里面,在models里面,添加数据库的设计类,代码如下

?

class Module(models.Model):
    """
    功能模块数据表的设计
    """
    # CharField 是告诉对应数据库的数据是什么类型的,unique是不能重复
    name = models.CharField(verbose_name='模块名称', max_length=45, unique=True)
    sequence = models.IntegerField(verbose_name='显示顺序', default=0)

    class Meta:
        # 按照sequence来排序
        ordering = ['sequence']
        # 默认是  应用名称_module,通过它修改表名
        db_table = 'Model'


class Api(models.Model):
    """
    接口表
    """
    name = models.CharField(verbose_name='接口名称', max_length=45)
    method = models.CharField(verbose_name='请求方式', max_length=45, default='GET')
    protocol = models.CharField(verbose_name='接口协议', max_length=10, default='HTTP')
    url = models.CharField(verbose_name='接口地址', max_length=256, default='')
    # 个数具有不确定性,采用json,默认字典自动会转json,body允许为空
    params = models.JSONField(verbose_name='查询参数', max_length=256, default=dict)
    header = models.JSONField(verbose_name='请求头信息', max_length=256, default=dict)
    body = models.JSONField(verbose_name='表单字段及描述信息', max_length=1024, null=True)

    types = (
        ('none', 'none'), ('multipart/form-date', 'multipart/form-data'),
        ('x-www-form-urlencoded', 'x-www-form-urlencoded'), ('application/json', 'application/json'),
        ('binary', 'binary'))
    # post 请求有几种类型格式,会根据请求方式,消息体类型不一样,加个字段去存储它,choices代表它的值来自到types里选的值。
    bodytype = models.CharField(verbose_name='消息体类型', max_length=30, choices=types, default='GET')
    status = models.CharField(verbose_name='几口状态', max_length=4, choices=(
        ('1', '启用'), ('2', '禁用'), ('3', '废弃')), default='启用')
    # auto_now_add 这个字段的值会自动生存,不需要我们插入
    createtime = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
    updatetime = models.DateTimeField(verbose_name='更新时间')
    isbase = models.CharField(verbose_name='是否基线化', max_length=4, choices=(('1', '是'), ('2', '否')), default='否')
    # 接口隶属于某个模块,模块表里的模块id号,模块表的主键在Api这个表里面叫外键,所以将外键这一列和Module有关联
    # 这里的意思是ForeignKey这一列的值来自于上面设计的Module这个模块表,最好变量名一样,只是小写,好操作
    module = models.ForeignKey(verbose_name='所属模块', on_delete=models.CASCADE, to=Module)

??? 2.创建数据库,用mysql命令行工具,

 create database AipTest_mysql;

??? 3.迁移数据库,制作迁移文件,在pycharm-Tools-manage.py 命令行中输入

makemigrations AipTest


??????? 或者 命令行 进入到项目目录
?

python manage.py makemigrations AipTest   # 让 Django 知道我们在我们的模型有一些变更,同步修改迁移数据库
python manage.py migrate AipTest   # 创建表结构


4.实现数据库增删改查:
??? 1.自己写
??????? 数据库底层操作
??????? 业务逻辑
??? 2.借助于框架生成

资源--核心,一切皆是资源
??? 模块表--资源--取名叫做module
??? 增删改查
??? 借助http协议,完成对数据库资源的增删改查

?? 如下访问的是数据路module表中的数据,module/3/代表module表中主键id为3的这条数据

??? http:192.168.1.105/module
??? 添加
??????? http:192.168.1.105/module
??????? 请求数据:json
??????? 请求方法:post
??? 修改? 修改3中的数据
??????? http:192.168.1.105/module/3/
??????? 请求数据:json
??????? 请求方法:put
??? 删除
??????? http:192.168.1.105/module/3/
??????? 请求方法:delete
??? 查询
??????? http:192.168.1.105/module/3/
??????? 请求方法:get

5.安装djangorestframework,设计视图层
??

 pip install djangorestframework


?? 1)设计Views, 到views.py里面去设计

# from django.shortcuts import render
from rest_framework import viewsets
from ApiTest import models, serializer


# Create your views here.
class Moduleview(viewsets.ModelViewSet):
    # 把设计的models数据都导入进来绑定,告诉views,要访问的视图、表、数据库是哪个
    queryset = models.Module.objects.all()

    # 写序列化和反序列化,用哪个序列化类来序列化,这里用自个写的序列化类
    serializer_class = serializer.ModuleSerializer


class Apiview(viewsets.ModelViewSet):
    # 把设计的models数据都导入进来绑定,告诉views,要访问的视图、表、数据库是哪个
    queryset = models.Api.objects.all()

    # 写序列化和反序列化,用哪个序列化类来序列化,这里用自个写的序列化类
    serializer_class = serializer.ApiSerializer

??? 2.数据格式的转换,设计序列化和反序列化的类


??? 前端? 发出的数据: 如
??? {"username":"pip_test", "password":"123456"}

??? 转换成这种格式,序列化和反序列化
??? insert into user(username, password) values("pip_test", "123456")


??? 后台? 数据库端发送到前端:
??? select * from user;
??? 转换成json数据
??? {"username":"pip_test", "password":"123456"}

?? 3.实现序列化,ApiTest中 新建 serializer.py 文件,继承serializers.ModelSerializer
??? 告诉 用 models.Module 来序列化

from rest_framework import serializers
from ApiTest import models


class ModuleSerializer(serializers.ModelSerializer):
    """
    Module数据库 的序列化,继承它的话增删改查都有了
    """

    # 表述元数据
    class Meta:
        # 告诉它你想序列化个表,你想序列化表里的哪些字段
        model = models.Module
        # 序列化所有字段
        fields = '__all__'


class ApiSerializer(serializers.ModelSerializer):
    """
    Api数据库 的序列化,继承它的话增删改查都有了
    """

    # 表述元数据
    class Meta:
        # 告诉它你想序列化个表,你想序列化表里的哪些字段
        model = models.Api
        # 序列化所有字段
        fields = '__all__'

4. 路由层,设计路由规则,让用户输入地址后,能到目标视图,告诉框架这个地址是访问的哪个地方
??? 实现路由,在框架urls里面,设置一切路由交给ApiTest中的urls路由去处理
??? 创建子路由,设置父路由

from django.contrib import admin
from django.urls import path, include
from django.conf.urls import url
from ApiTest import views
from rest_framework import routers

# # 创建一个路由对象,这是子路由
router = routers.DefaultRouter()
# # 注册一个路由,如果用户输入192.168.1.105/module/,就交给views.Moduleview 来处理
router.register('module', views.Moduleview)
router.register('Api', views.Apiview)


# 上层路由,父路由
urlpatterns = [

    # 当客户发出了请求为192.168.1.105/aip/,就交给router.urls去处理
    # path('aip', include(router.urls)),
    # 这样就不用父路由,只用上面的子路由 访问
    path('', include(router.urls))

]


5.启动服务 python manage.py runserver

在如apiPst工具中测试
??? post http://127.0.0.1:8000/module/
??????? Body raw 选json,输入json,发起请求,就能在module表中增加数据
??????? {
??????????? "name" : "api_test0003",
??????????? "sequence" : 3
??????? }
??? delete http://127.0.0.1:8000/module/3,就能在module表中删除 第3条数据

6、解决跨域请求问题

1.安装django-cors-headers

pip3 install django-cors-headers

2.配置settings.py文件

INSTALLED_APPS = [
    ...
    'corsheaders',
    ...
 ] 

# Django3.x以后是MIDDLEWARE,在这上面添加一行,顺序不能有错
MIDDLEWARE_CLASSES = (
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware', # 注意顺序
    ...
)
#跨域增加忽略
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
# CORS_ORIGIN_WHITELIST = (
#     '*'
# )

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

CORS_ALLOW_HEADERS = (
    'XMLHttpRequest',
    'X_FILENAME',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
    'Pragma',
)

前端篇

1、测试开发场景架构及平台
??? 前后端分离:
??????? 前端:Vue--JavaScript
??????? 后端:Python/Java
??? 平台:目标--服务于测试

2、前端核心技术
??? HTML
??????? html标签--内容战士
??????? js--增强脚本
??????? css--美化页面

3、搭建vue开发环境
??? 1)安装nodejs
??????? https://nodejs.org/en/download/
??? 2)安装cnpm:打开命令行
??????? npm install -g cnpm --registry-https://registry.npm.taobao.org

??? 3)搭建vue的开发环境,安装vue的脚手架工具,官方命令行工具
??????? cnpm install --global vue-cli(此命令只需执行一次)

??? 4)创建项目并运行,在项目目录下执行如下命令,publicfronted是项目名
??????? cd /d F:\PycharmProjects
??????? vue init webpack DTestPlatformWeb?????? 创建一个vue项目
?? ?Target directory exists. Continue? Yes
? ??? ? Project?????? dtest_platform_web
?? ?Project description?? 项目说明
?? ?等一段时间
?? ?Install vue-router? Yes
?? ?Use ESLint to lint your code? (Y/n)??? 代码规范
?? ?Set up unit tests (Y/n)? 设置单元测试

4、安装依赖组件
??? 1)npm i install axios -S
??? 2)npm i element-ui -S
??? 3)npm i js-cookie -S
??? 4)npm i install vuex -S

5. Element 引用
main.js中,加入

import ElementUI from 'element-ui'
Vue.use(ElementUI)

6.路由设置,src/router里面设置路由跳转

import Test from '../components/Test'

  routes: [
    {
      // 当用户输入/,就打开 components/中的HelloWorld.vue
      path: '/hello',
      name: 'HelloWorld',
      component: HelloWorld
    },
    {
      // 当用户输入/login,就打开 components/Test.vue
      path: '/',
      name: 'Test',
      component: Test
    }]

7.运行流畅解析
? Vue组件化开发模式

? 1)入口界面:index.html--》? ,它先展示的是App.vue
??? src文件夹中的 main.js(完成所有的组件初始化,开始的地方)
????? 创建一个vue对象,并挂载一个根组件

??? vue组件:
????? 扩展名 .vue
????? 组件内容:
??????? 三部分内容组成:
????????? 模板:html网页:
??????????? <template>
????????????? <div id='test_platfrom'>
??????????????? <p>{{message}}</p>
??????????????? <input type='button' @click='clickme'>嘿嘿</p>
????????????? </div>
??????????? <template>

????????? 模型:javaScript脚本
??????????? 数据 message=‘你好’
??????????? 方法 clickme()
??????????????? 自定义方法
??????????????? 内置的钩子子函数

????????? 样式:
????????????? <style>
??????????????? #api_test {color:red}
????????????? </style>

8.启动开发环境下的web服务

启动开发环境下的web服务
npm run dev

启动web服务
npm run serve  

编译
npm run build

前后端通信

安装环境

npm install --save axios

1、src文件夹下创建utils文件夹,完成后台请求对象

创建http.js和request.js

2、http.js中完成请求方法的定义

import request from "./request"

export function get(url, params={}) {
  return request.get(url, {params: params})
}

export function post(url, data={}) {
  return request.post(url, data)
}

export function put(url, data={}) {
  return request.put(url, data)
}

export function patch(url, data={}) {
  return request.patch(url, data)
}

export function del(url, data={}) {
  return request.delete(url, data)
}

3、request.js中完成创建一个可以访问后端接口的对象

// 核心组件 axios 通过它完成后台请求,restframework  和 java的 spring boot等
import axios from "axios";

// 通过这个一个js对象,来创建一个名字为service 能访问后端接口的对象
const service = axios.create(
  {
    baseURL:'http://127.0.0.1:8000',  // url = baseUrl + 请求路径
    timeout:25000,
    // 凭证
    withCredentials:true
  }
)

// 拦截器封装,
export default service

4、src文件夹main.js中完成接口请求方法挂载给Vue

import {get, post, put, patch, del} from './utils/http'

//把http中的方法,挂载给Vue的原型去处理,这里的Vue相当于下面的new Vue
Vue.prototype.$get = get
Vue.prototype.$post = post
Vue.prototype.$put = put
Vue.prototype.$patch = patch
Vue.prototype.$del = del


5、.Vue中的<script>部分,定义的方法中,可以通过this.$get()等调用这些方法

methods:{
??? clickme(){
????? //这里调用的get,就是main.js里面挂载的get方法,这里的this,就是指main.js里的new Vue
????? this.$get()

前端例子,ModuleView.vue

<template>
  <!-- :data 冒号代表 双向绑定,数据绑定script中定义的data方法中返回的 tableData的值 -->
  <el-table
      :data="mdate"
      :stripe="true"
      style="width: 100%">
      <el-table-column
        prop="id"
        label="编号"
        width="180">
      </el-table-column>
      <el-table-column
        prop="name"
        label="模块名称"
        width="180">
      </el-table-column>
      <el-table-column
        prop="sequence"
        label="顺序编号">
      </el-table-column>
    </el-table>
</template>

<script>
export default {
  data () {
    return {
      mdate: []
    }
  },
  mounted () {
    // this.$post('/module/', {'name': 'api5', 'sequence': 5}).then(res => {
    //   console.log(res.statusText)
    // })
    // this.$put('/module/3/', {'name': 'api3', 'sequence': 3}).then(res => {
    //
    // })
    this.$get('/module/').then(res => {
      this.mdate = res.data
    })
  }
}
</script>

<style scoped>

</style>

部署篇

Nginx 安装

系统平台:CentOS 7 64位。如下链接任意下载

CentOS Mirrors List

一、安装编译工具及库文件

yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

二、首先要安装 PCRE

PCRE 作用是让 Nginx 支持 Rewrite 功能。

1、下载 PCRE 安装包,先输入su 和root密码进入root模式

[root@bogon src]# cd /usr/local/src/
[root@bogon src]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

2、解压安装包:

[root@bogon src]# tar zxvf pcre-8.35.tar.gz

3、进入安装包目录

[root@bogon src]# cd pcre-8.35

4、编译安装?

[root@bogon pcre-8.35]# ./configure
[root@bogon pcre-8.35]# make && make install

安装 Nginx

1、下载 Nginx,并解压,下载地址:nginx: download

[root@bogon src]# cd /usr/local/src/
[root@bogon src]# wget http://nginx.org/download/nginx-1.6.2.tar.gz
[root@bogon src]# tar zxvf nginx-1.6.2.tar.gz

2、进入安装包目录,编译安装

[root@bogon src]# cd nginx-1.6.2
[root@bogon nginx-1.6.2]# ./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35
[root@bogon nginx-1.6.2]# make
[root@bogon nginx-1.6.2]# make install

到此,nginx安装完成。

Nginx 配置

创建 Nginx 运行使用的用户 www:

[root@bogon conf]# /usr/sbin/groupadd www 
[root@bogon conf]# /usr/sbin/useradd -g www www

配置nginx.conf ,将/usr/local/webserver/nginx/conf/nginx.conf替换为以下内容。为了方便权限,

先复制文件到另一个目录, cp? -a? /usr/local/webserver/nginx/conf/nginx.conf? 目标文件夹。

再到目标文件夹修改好,然后再复制到cp? -i? 目标文件夹/nginx.conf /usr/local/webserver/nginx/conf/nginx.conf?

user www www;
worker_processes 2; #设置值和CPU核心数一致
error_log /usr/local/webserver/nginx/logs/nginx_error.log crit; #日志位置和日志级别
pid /usr/local/webserver/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events
{
  use epoll;
  worker_connections 65535;
}
http
{
  include mime.types;
  default_type application/octet-stream;
  log_format main  '$remote_addr - $remote_user [$time_local] "$request" '
               '$status $body_bytes_sent "$http_referer" '
               '"$http_user_agent" $http_x_forwarded_for';
  
#charset gb2312;
     
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  client_max_body_size 8m;
     
  sendfile on;
  tcp_nopush on;
  keepalive_timeout 60;
  tcp_nodelay on;
  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  fastcgi_buffer_size 64k;
  fastcgi_buffers 4 64k;
  fastcgi_busy_buffers_size 128k;
  fastcgi_temp_file_write_size 128k;
  gzip on; 
  gzip_min_length 1k;
  gzip_buffers 4 16k;
  gzip_http_version 1.0;
  gzip_comp_level 2;
  gzip_types text/plain application/x-javascript text/css application/xml;
  gzip_vary on;
 
  #limit_zone crawler $binary_remote_addr 10m;
 #下面是server虚拟主机的配置
 server
  {
    listen 8088;#监听端口
    server_name localhost;#域名
    index index.html index.htm index.php;
    root /usr/local/webserver/nginx/html;#站点目录
      location ~ .*\.(php|php5)?$
    {
      #fastcgi_pass unix:/tmp/php-cgi.sock;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      include fastcgi.conf;
    }
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$
    {
      expires 30d;
  # access_log off;
    }
    location ~ .*\.(js|css)?$
    {
      expires 15d;
   # access_log off;
    }
    access_log off;
  }

}

检查配置文件nginx.conf的正确性命令:

[root@bogon conf]# /usr/local/webserver/nginx/sbin/nginx -t

?启动nginx

[root@bogon conf]# /usr/local/webserver/nginx/sbin/nginx

查看nginx启动情况,有www说明启动成功

ps -ef | grep nginx

?

问题:无法启动nginx,或有异常,先退出命令行,重新打开启动

打开127.0.0.1看到

welcome to nginx的页面说明成功了

Nginx 其他命令

以下包含了 Nginx 常用的几个命令:

/usr/local/webserver/nginx/sbi

目录

后端篇

6、解决跨域请求问题

前端篇

前后端通信

前端例子,ModuleView.vue

部署篇

Nginx 安装

一、安装编译工具及库文件

二、首先要安装 PCRE

安装 Nginx

Nginx 配置

Nginx 其他命令


n/nginx -s reload            # 重新载入配置文件
/usr/local/webserver/nginx/sbin/nginx -s reopen            # 重启 Nginx
/usr/local/webserver/nginx/sbin/nginx -s stop              # 停止 Nginx

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-23 12:17:56  更:2021-11-23 12:19:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:27:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码