• 斑马斑马-08-白云之上-python在Linux上的部署


     部署说明

    • 系统:CentOS Linux release 8.1.1911 (Core)  【linux查看命令:cat /etc/redhat-release】
    • python:python3.6 

    • django:
    • mysql:Ver 14.14 Distrib 5.7.24,
    • Nginx:nginx-1.17.9
    • uwsgi:

    一、Nginx安装(有坑)与卸载

    下载nginx与安装 

    1、下载:
      $ wget http://nginx.org/download/nginx-1.17.9.tar.gz -P /usr/src
    2、解压:
      $ cd /usr/src
      $ tar xvf nginx-1.17.9.tar.gz
      $ cd nginx-1.17.9
    3、安装前的准备
      # nginx是c写的
      $ yum -y install gcc
      # url重写用到的包
      $ yum -y install pcre-devel
      # 解压缩用到的包
      $ yum -y install zlib zlib-devel

      4、配置安装环境
        $ ./configure --prefix=/usr/local/nginx

      5、编译源码生成可执行程序 依赖gcc
        $ make -j4
      6、 安装程序
        $ make install

      7、 启动nginx
        $ /usr/local/nginx/sbin/nginx
      8、 当前系统监听tcp端口的进程
        $ netstat -ntpl

      9、删除不再需要的源码
        $ rm -rf nginx-1.17.9

      10、阿里云服务器,需要开发端口

     检测:

    卸载nginx

    1.首先输入命令 ps -ef | grep nginx检查一下nginx服务是否在运行。

    2.停止Nginx服务

    /etc/init.d/nginx stop 不同的安装方式可能停止的方法不同

     

    3.查找、删除Nginx相关文件 

    • 查看Nginx相关文件:whereis nginx
    •  删除

    • find查找相关文件,并删除
    •  再次使用yum删除。yum remove nginx

    二、Mysql的安装 

        mysql的安装请参考: 斑马斑马-03-白云之上-成功上云 

    三、Python的安装 

    python的安装请参考:斑马斑马-06-白云之上-python 在 linux的安装  

    四、上传项目到指定目录

    1:目录简介:

      HelloWorld,是我们的项目总目录

        Django_Admin 是我们的项目目录

        script 中是用于存放启动项目相关的脚本

     2:查看目前项目安装了哪些内容

    ps:当我们开发项目的时候,会用virtualenv创建很多python独立环境,

    这时候就会出现在不同环境下安装相同的模块的时候,为了避免我们通过联网下载所需模块,不如我们直接从之前python环境已经有的模块中直接拿来用。

      输入pip freeze >requirements.txt回车后此时在项目的文件夹中会有产生一个名是requirements.txt的文本文档

     

    3:使用命令生成数据库

    python3 manage.py migrate

    4:修改setting文件

    vim settings.py 

     5:启动项目

       如果:python3 manage.py runserver 39.99.213.203:8000 启动不起来,用

            python3 manage.py runserver 0:8000

     6:测试项目是否启动成功

    五、uwsg的安装 

    1:安装uwsgi,
    安装:pip install uwsgi
    2:使用uWSGI启动服务

    执行这条命令的时候,一定要在这个项目目录中
    格式:uwsgi --http 服务器地址 --file 项目文件名/wsgi.py --static-map=/static=static
    方式一:uwsgi --http 39.99.213.203:8000 --file Django_Admin/wsgi.py --static-map=/static=static
    如果方式一启动不起来,把ip地址修改成0:uwsgi --http 0:8000 --file Django_Admin/wsgi.py --static-map=/static=static

    3:测试

      

     4:在实际的生产中,一般不会通过脚本启动,都是通过配置文件来启动,也就是跟项目同一级别的script中

      vim uwsgi.ini

    [uwsgi]
    #项目目录
    chdir=/opt/project/HelloWorld/Django_Admin/
    # 启动uwsgi的用户名和用户组
    uid=root
    gid=root
    # 指定项目的applications
    module=Django_Admin.wsgi:application
    # 指定sock文件路径
    socket=/opt/project/HelloWorld/script/uwsgi.sock
    # 启动主进程
    master=true
    # 进程个数
    workers=5
    pidfile=/opt/project/HelloWorld/script/uwsgi.pid
    # 自动移除unix socket 和 pid 文件,当服务停止的时候
    vacuum=true
    # 如果可能的话,序列化接收的内容
    thunder-lock=true
    # 启动线程
    enable-threads=true
    # 设置中断时间
    harakiri=30
    # 设置缓冲
    post-buffering=2048
    # 设置日志目录
    daemonize=/opt/project/HelloWorld/script/uwsgi.log
    uwsgi.ini

    如果启动不起来可以把里面的注释删掉

     启动:uwsgi --ini uwsgi.ini

    查看服务是否启动:ps -ef | grep uwsgi

    六、Nginx安装

    解决Centos7安装nginx后无conf.d目录或conf.d目录下无default.conf文件

    在学习nginx的过程中,安装nginx后找不到conf.d目录下的default.conf文件,其原因是该操作系统下的epel源是默认下载就是Fedora操作系统的

    1:重新安装nginx,并修改nginx的epel镜像源地址

    yum install yum-utils

    创建新的nginx.repo文件

    vim /etc/yum.repos.d/nginx.repo

    nginx="/usr/local/nginx/sbin/nginx" NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/8/$basearch/
    gpgcheck=0
    enabled=1
    nginx.repo

      #baseurl这行centos根据操作系统修改,比如:os/rehel
      # 8 是Linux系统的版本,可以通过url查看路径是否正确

    安装Nginx

     yum -y install nginx

    2:安装完成后,添加一个配置文件

    cd /etc/nginx/conf.d/ #添加配置文件
    vim Django_Admin.conf #这个名字随便起,最好和项目是一个名字

    server {
    listen 80;
    server_name 39.99.213.203;
    access_log /var/log/nginx/access.log main;
    charset utf-8;
    gzip on;
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    error_page 404 /404.html;
    error_page 500 502 503 504 /50X.html;
    # 指定项目路径uwsgi
    location / {
    include uwsgi_params;
    uwsgi_connect_timeout 30;
    uwsgi_pass unix:/opt/project/HelloWorld/script/uwsgi.sock;
    
    }
    # 指定静态文件路径
    location /static/ {
    alias /opt/project/HelloWorld/Django_Admin/static/;
    index index.html index.htm;
    } 
    }
    Django_Admin.conf

    3:设置开机启动:在/etc/init.d/目录下创建nginx脚本文件(不要直接用FTP创建编辑,使用vi编辑)

    #!/bin/sh
    #
    # nginx - this script starts and stops the nginx daemon
    #
    # chkconfig:   - 85 15
    # description:  NGINX is an HTTP(S) server, HTTP(S) reverse 
    #               proxy and IMAP/POP3 proxy server
    # processname: nginx
    # config:      /etc/nginx/nginx.conf
    # config:      /etc/sysconfig/nginx
    # pidfile:     /var/run/nginx.pid
     
    # Source function library.
    . /etc/rc.d/init.d/functions
     
    # Source networking configuration.
    . /etc/sysconfig/network
     
    # Check that networking is up.
    [ "$NETWORKING" = "no" ] && exit 0
     
    nginx="/usr/local/nginx/sbin/nginx"
    prog=$(basename $nginx)
     
    NGINX_CONF_FILE="/etc/nginx/nginx.conf"
     
    [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
     
    lockfile=/var/lock/subsys/nginx
     
    make_dirs() {
       # make required directories
       user=`$nginx -V 2>&1 | grep "configure arguments:.*--user=" | sed 's/[^*]*--user=([^ ]*).*/1/g' -`
       if [ -n "$user" ]; then
          if [ -z "`grep $user /etc/passwd`" ]; then
             useradd -M -s /bin/nologin $user
          fi
          options=`$nginx -V 2>&1 | grep 'configure arguments:'`
          for opt in $options; do
              if [ `echo $opt | grep '.*-temp-path'` ]; then
                  value=`echo $opt | cut -d "=" -f 2`
                  if [ ! -d "$value" ]; then
                      # echo "creating" $value
                      mkdir -p $value && chown -R $user $value
                  fi
              fi
           done
        fi
    }
     
    start() {
        [ -x $nginx ] || exit 5
        [ -f $NGINX_CONF_FILE ] || exit 6
        make_dirs
        echo -n $"Starting $prog: "
        daemon $nginx -c $NGINX_CONF_FILE
        retval=$?
        echo
        [ $retval -eq 0 ] && touch $lockfile
        return $retval
    }
     
    stop() {
        echo -n $"Stopping $prog: "
        killproc $prog -QUIT
        retval=$?
        echo
        [ $retval -eq 0 ] && rm -f $lockfile
        return $retval
    }
     
    restart() {
        configtest || return $?
        stop
        sleep 1
        start
    }
     
    reload() {
        configtest || return $?
        echo -n $"Reloading $prog: "
        killproc $nginx -HUP
        RETVAL=$?
        echo
    }
     
    force_reload() {
        restart
    }
     
    configtest() {
      $nginx -t -c $NGINX_CONF_FILE
    }
     
    rh_status() {
        status $prog
    }
     
    rh_status_q() {
        rh_status >/dev/null 2>&1
    }
     
    case "$1" in
        start)
            rh_status_q && exit 0
            $1
            ;;
        stop)
            rh_status_q || exit 0
            $1
            ;;
        restart|configtest)
            $1
            ;;
        reload)
            rh_status_q || exit 7
            $1
            ;;
        force-reload)
            force_reload
            ;;
        status)
            rh_status
            ;;
        condrestart|try-restart)
            rh_status_q || exit 0
                ;;
        *)
            echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
            exit 2
    esac
    nginx

    nginx="/usr/local/nginx/sbin/nginx" 和 NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"的需要根据自己的安装路径进行修改

    查看安装路径:nginx -V

     4:更改文件权限

      chmod 755 /etc/init.d/nginx

    5:将nginx添加至chkconfig管理列表

      chkconfig --add /etc/init.d/nginx

    6:用chkconfig设置其开机启动
      chkconfig --level 2345 nginx on

    7: 启动

      /etc/init.d/nginx start  

    解决Centos7安装nginx,报No match for argument

    可能是yum把它给禁用了

    vim /etc/yum.conf,把下面那句给注释掉

     再次执行 yum -y instll nginx

     

    七、配置静态文件

    1:启动nginx和uwsgi

    uwsgi --ini uwsgi.ini
    /etc/init.d/nginx start

     2:访问页面

    查看日志可以发现,确实通过neginx来走的

     但是,发现访问django_admin里面的css样式是乱掉的

     3:设置静态文件

       首先停掉nginx和uwsgi  

        /etc/init.d/nginx stop

        uwsgi --stop uwsgi.pid

     

       查看状态

      其次,生成数据库,并创建管理员用户  

        python3 manage.py makemigrations
        python3 manage.py migrate
        python3 manage.py createsuperuser

      修改setting.py文件:  vim settings.py  

      添加默认的静态目录(收集使用):STATIC_ROOT = os.path.join(BASE_DIR,"static_all")

    ··收集静态文件:python3 manage.py collectstatic --noinput

    我们进入目录可以看到生成了相应的静态文件

      修改Nginx配置文件中location的静态目录:vim /etc/nginx/conf.d/Django_Admin.conf 

    alias /opt/project/HelloWorld/Django_Admin/static/;  修改为    alias /opt/project/HelloWorld/Django_Admin/static_all/;

      最后,重启uwsgi和nginx

      

       测试:

    八、把上面的内容整合到一个脚本文件中

    1:编辑管理脚本

        cd /etc/init.d/

        vim manage_Django_Admin.sh    

    #! /bin/sh
    # chkconfig: 345 85 15
    # 上面一行注释:哪些Linux级别需要启动manage_Django_Admin(3,4,5);启动序号(85);关闭序号(15)。
    # description: manage script is the Django_Admin daemon.
    # Author: yango
    # 指定项目目录
    PROJECT_DIR="/opt/project/HelloWorld/Django_Admin"
    # 指定脚本目录在哪里
    SCRIPTS_DIR="/opt/project/HelloWorld/script"
    # 描述
    DESC="Django_Admin daemon"
    # 名称
    NAME="Django_Admin"
    # 脚本名称
    SCRIPT_FILENAME="manage_Django_Admin.sh"
    # 脚本目录名称
    SCRIPTNAME=`pwd`/$SCRIPT_FILENAME
    
    # PID
    PID="uwsgi.pid"
    
    # 启动函数
    d_start(){
    # 进入到项目目录
    cd $SCRIPTS_DIR
    # 判断这个PID是否存在
    if [ ! -f $PID ];then
    echo -e "
    33[34m$NAME项目启动中........33[0m"
    # 如果不存在执行
    uwsgi --ini uwsgi.ini
    killall nginx
    /etc/init.d/nginx start
    # 自动收集静态文件
    cd $PROJECT_DIR && python3 manage.py collectstatic --noinput
    echo -e "
    33[32m$NAME 项目启动完成........33[0m"
    exit 0
    fi
    echo -e "
    33[33m$NAME 项目已启动请勿重复启动33[0m"
    }
    # 关闭函数
    # 关闭项目
    d_stop(){
    # 进入脚本目录
    cd $SCRIPTS_DIR
    # 判断这个pid文件是否存在
    if [ ! -f "uwsgi.pid" ];then
    # 这个项目已经关闭了
    echo -e "
    33[33m$NAME 项目已经关闭了请先启动33[0m"
    fi
    echo -e "
    33[34m$NAME 项目关闭中........33[0m"
    echo -e "
    Stop $DESC: $NAME"
    # 如果没有关闭
    uwsgi --stop uwsgi.pid
    # 是否停掉Nginx根据实际需要来操作~~!因为Nginx有对静态文件缓存[注意]
    killall nginx
    /etc/init.d/nginx start
    echo -e "
    33[32m$NAME 项目关闭完成........33[0m"
    }
    
    d_restart(){
    d_stop
    sleep 1
    d_start
    }
    
    case "$1" in
    start)
    echo -e "
    starting $DESC: $NAME"
    d_start
    ;;
    stop)
    echo -e "
    Stop $DESC: $NAME"
    d_stop
    ;;
    restart)
    echo -e "
    Restart $DESC: $NAME"
    d_restart
    ;;
    *)
    echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
    exit 3
    ;;
    esac
    manage_Django_Admin

    2:分配权限  chmod 755 manage_Django_Admin.sh

    3:测试启动与停止

     4:进一步优化

      把管理脚本添加到服务中

      chkconfig --add manage_Django_Admin.sh

      设置成开机自启动

      chkconfig manage_Django_Admin.sh on

      查看启动级别

      chconfig --list manage_Django_Admin.sh

      在任何目录都可通过

      service manage_Django_Admin.sh start 了

     

    十、一键部署+虚拟环境

    目标:从github上找django两个项目,快速部署到自己服务器上

    1:创建两个虚拟环境

    # mkvirtualenv wangblog

    # mkvirtualenv jingblog

    2:下载两个django项目

    https://github.com/myminwang/myblog
    https://github.com/newpanjing/myblog

    3:代码上传服务器并解压至相应的文件夹

      解压 unzip 文件名

      # cd /opt/project/wblog

      # unzip myblog.zip

     

    4:分别在各自的虚拟环境中,一键安装相应的包

      进入到:各自的虚拟目录

      # workon wangblog 

      # /opt/project/wblog/myblog

      一键配置安装包 pip3 install -r requirements.txt

      # pip3 install -r requirements.txt
      安装过程总可能会出现一些错误,都可百度处理,这里不再赘述。

    5:修改配置文件(数据库)

      修改数据库相关配置并创建数据库
      CREATE DATABASE `myblog` CHARACTER SET utf8 COLLATE utf8_general_ci;

    6:runserver正常运行

      python3 manage.py makemigrations
      python3 manage.py migrate

      python3 manage.py runserver 0:8088

    7:检查配置文件

      主要是静态文件相关部分,用于nginx静态分配

       STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static_all'),)

    8:修改一键部署脚本

      添加部署脚本,注意放置位置

     

    #! /bin/sh
    # decription:一键部署Nginx+uWSGI+Django
    # Author: yango 
    
    MANAGE_DIR=`pwd`
    #**************************您的配置区域其他的无需修改**************************
    # [config1]项目名称
    PROJECT_NAME="myblog"
    # [config2]nginx域名或者IP地址和端口,我们用来访问的
    SERVER_NAME="0" #也可以是域名
    SERVER_PORT=8088
    # 如果有虚拟环境需要指定虚拟路径名称
    VEN_NAME="wangblog"
    # 如果有虚拟环境需要指定虚拟路径
    VEN_PATH=/root/.virtualenvs/$VEN_NAME
    #******************************************************************************
    # 项目目录
    PROJECT_DIR=$MANAGE_DIR/$PROJECT_NAME
    
    
    # 检查项目目录是否存在
    check_project(){
        if [ ! -d $PROJECT_DIR ]; then
            echo -e "
    33[33m PROJECT_DIR 没有指定,请指定项目目录33[0m"
            exit 0
        elif [ -d $PROJECT_DIR ]; then
            echo -e "33[32m项目目录存在是:$PROJECT_DIR........33[0m"
        fi
    
    
    }
    
    
    # 创建脚本管理配置
    make_script_init(){
        echo -e "33[32m开始创建script目录........33[0m"
        mkdir script
        echo -e "33[32m开始创建管理文件........33[0m"
        cat > script/manage_$PROJECT_NAME<<EOF
    #! /bin/sh
    # chkconfig: 345 85 15
    # 上面一行注释:哪些Linux级别需要启动manage_myblog(3,4,5);启动序号(85);关闭序号(15)。
    # description: manage script is the $PROJECT_NAME daemon.
    #home目录
    home=$VEN_PATH
    # Author: yango
    # 重载环境变量
    export PATH=$PATH:/usr/local/lib/python3.7
    # 指定项目目录
    PROJECT_DIR=$PROJECT_DIR
    # 指定脚本目录在哪里
    SCRIPTS_DIR=$MANAGE_DIR/script
    # 描述
    DESC="$PROJECT_NAME daemon"
    # 名称
    NAME=$PROJECT_NAME
    # 脚本名称
    SCRIPT_FILENAME=manage_$PROJECT_NAME
    # 脚本目录名称
    SCRIPTNAME=$MANAGE_DIR/script
    # PID
    PID="uwsgi.pid"
    
    # 启动函数
    d_start(){
    # 激活虚拟环境 
    source  $VEN_PATH/bin/activate
    # 进入到项目目录
    cd $MANAGE_DIR/script/
    # 判断这个PID是否存在
    if [ ! -f "uwsgi.pid" ];then
    echo -e "
    33[34m$NAME项目启动中........33[0m"
    # 如果不存在执行
    uwsgi --ini uwsgi.ini
    killall nginx
    /etc/init.d/nginx start
    # 自动收集静态文件
    cd $MANAGE_DIR/$PROJECT_NAME&& python3 manage.py collectstatic --noinput
    echo -e "
    33[32m$NAME 项目启动完成........33[0m"
    exit 0
    fi
    echo -e "
    33[33m$NAME 项目已启动请勿重复启动33[0m"
    }
    # 关闭函数
    # 关闭项目
    d_stop(){
    # 进入脚本目录
    cd $MANAGE_DIR/script/
    # 判断这个pid文件是否存在
    if [ ! -f "uwsgi.pid" ];then
    # 这个项目已经关闭了
    echo -e "
    33[33m$NAME 项目已经关闭了请先启动33[0m"
    fi
    echo -e "
    33[34m$NAME 项目关闭中........33[0m"
    echo -e "
    Stop $DESC: $NAME"
    # 如果没有关闭
    uwsgi --stop uwsgi.pid
    # 是否停掉Nginx根据实际需要来操作~~!因为Nginx有对静态文件缓存[注意]
    killall nginx
    /etc/init.d/nginx start
    echo -e "
    33[32m$NAME 项目关闭完成........33[0m"
    }
    
    d_restart(){
    d_stop
    sleep 1
    d_start
    }
    
    case "$1" in
        start)
    echo -e "
    starting $DESC: $NAME"
    d_start
    ;;
    stop)
    echo -e "
    Stop $DESC: $NAME"
    d_stop
    ;;
    restart)
    echo -e "
    Restart $DESC: $NAME"
    d_restart
    ;;
    *)
    echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
    exit 3
    ;;
    esac
    EOF
    chmod 755 $MANAGE_DIR/script/manage_$PROJECT_NAME
    echo -e "33[32m开始添加uwsgi.ini配置文件........33[0m"
    cat > script/uwsgi.ini<<EOF
    [uwsgi]
    # 项目目录
    chdir=$PROJECT_DIR
    # 启动uwsgi的用户名和用户组
    uid=root
    gid=root
    # 指定项目的application
    module=$PROJECT_NAME.wsgi:application
    # 指定sock的文件路径
    socket=$MANAGE_DIR/script/uwsgi.sock
    # 启用主进程
    master=true
    # 进程个数
    workers=5
    pidfile=$MANAGE_DIR/script/uwsgi.pid
    # 自动移除unix Socket和pid文件当服务停止的时候
    vacuum=true
    # 序列化接受的内容,如果可能的话
    thunder-lock=true
    # 启用线程
    enable-threads=true
    # 设置自中断时间
    harakiri=30
    # 设置缓冲
    post-buffering=4096
    # 设置日志目录
    daemonize=$MANAGE_DIR/script/uwsgi.log
    EOF
    echo  "STATIC_ROOT = os.path.join(BASE_DIR, 'static_all')">> $MANAGE_DIR/$PROJECT_NAME/$PROJECT_NAME/settings.py
    }
    
    make_nginx_init(){
        echo -e "33[32m初始化Nginx........33[0m"
        cat > /etc/yum.repos.d/nginx.repo<<EOF
    [nginx]
    name=nginx repo
    # 下面这行centos根据你自己的操作系统修改比如:OS/rehel
    # 6是你Linux系统的版本,可以通过URL查看路径是否正确
    baseurl=http://nginx.org/packages/centos/6/$basearch/
    gpgcheck=0
    enabled=1
    EOF
    yum -y install nginx
    echo -e "33[32m添加Nginx配置文件........33[0m"
    
    cat > /etc/nginx/conf.d/$PROJECT_NAME.conf<<EOF
        server {
                        listen $SERVER_PORT;
                        server_name $SERVER_NAME ;
                        access_log  /var/log/nginx/access.log  main;
                                    charset  utf-8;
                        gzip on;
                        gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;
    
                        error_page  404           /404.html;
                        error_page   500 502 503 504  /50x.html;
                        # 指定项目路径uwsgi
                        location / {
                            include uwsgi_params;
                            uwsgi_connect_timeout 30;
                                        uwsgi_pass unix:$MANAGE_DIR/script/uwsgi.sock;
                        }
                        # 指定静态文件路径
                        location /static/ {
                            alias  $MANAGE_DIR/$PROJECT_NAME/static_all/;
                                        index  index.html index.htm;
                        }
    
        }
    EOF
    }
    add_server(){
    echo -e "33[32m添加管理至服务........33[0m"
    cp $MANAGE_DIR/script/manage_$PROJECT_NAME /etc/init.d/
    chkconfig --add /etc/init.d/manage_$PROJECT_NAME
    chkconfig /etc/init.d/manage_$PROJECT_NAME on
    
    # 启动服务
    echo -e "33[32m启动服务........33[0m"
    service manage_$PROJECT_NAME start
    }
    
    
    check_project
    make_script_init
    make_nginx_init
    add_server
    deploy_project.sh

       分配权限 chmod 755 deploy_project.sh 

     切换到虚拟环境 checkon wangblog

     执行脚本 ./deploy_project.sh 

    执行成功后,script文件中会多出一些内容

    10:启动测试

    service manage_myblog start

    service manage_myblogs start

     ps:如果 在启动过程中遇到了这个error reading information on service 

     

       1查看deploy_project.sh文件中报错位置

      

       2:查看文件发现,文件也存在哈,但是运行确实会有问题

       3: 安装 yum install dovecot

  • 相关阅读:
    vue中的$event
    vue实现div拖拽互换位置
    关于marquee首次加载出现闪跳问题
    微信小程序之深色模式下样式的写法
    html动态添加公共页头和页脚
    微信小程序改变上一页面的数据,页面中的通信
    mui中的a标签无效和click无法点击的问题
    mui.DtPicker is not a constructor解决方案
    mui-slider选项卡设置默认index
    flutter环境配置遇到的一些坑
  • 原文地址:https://www.cnblogs.com/YK2012/p/12714191.html
Copyright © 2020-2023  润新知