zoukankan      html  css  js  c++  java
  • [python]基于windows搭建django项目

    1.首先我的环境用到的库版本如下,若下载直接pip即可

    pip3 install Django==2.0.6
    pip3 install djangorestframework==3.8.2
    pip3 install mysqlclient==1.3.12
    pip3 install xlrd
    pip3 requests
    pip3 install ldap3
    pip3 install django-cors-headers

    2.创建一个django项目

    django-admin.py startproject 项目名

    3.创建一个app(应用)

    django-admin.py startapp 应用程序名

    4.配置数据库,在项目的下的setting.py配置(我使用的是mysql)

    DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': '数据库',
    'PORT': '端口号',
    'HOST': '数据库ip',
    'USER': '用户名',
    'PASSWORD': '密码',

    }
    }

    5.在setting.py添加上面创建的应用,添加rest_frmework是因为后面我用到这里的方法写的接口,不用可不写

    INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 跨域
    'corsheaders',
    'rest_framework',
    # 应用名
    'webapi',
    ]
    上面配置的跨域 ,MIDDLEWARE也需要配置下
    MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    # 跨域配置
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ]
    seeting配置请求拦截
    # 跨域增加忽略
    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 = (
    'accept',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
    'token',
    )

    6.创建管理员用户

    cd 到项目根目录下,非应用目录下~

    再执行下面命令,同步框架配置相关表到配置的数据库

    python manage.py createsuperuser(如果报错没有找到相关表,先执行python manage.py migrate)

    7.配置日志

    项目目录下建logs文件夹

    import time
    # times = time.strftime('%Y-%m-%d',time.localtime(time.time()))
    # res_times = times.replace("-", "")
    import time
    
    cur_path = os.path.dirname(os.path.realpath(__file__))  # log_path是存放日志的路径
    log_path = os.path.join(os.path.dirname(cur_path), 'logs')
    if not os.path.exists(log_path): os.mkdir(log_path)  # 如果不存在这个logs文件夹,就自动创建一个
    
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': True,
        'formatters': {
            # 日志格式
            'standard': {
                'format': '[%(asctime)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] '
                          '[%(levelname)s]- %(message)s'},
            'simple': {  # 简单格式
                'format': '%(levelname)s %(message)s'
            },
        },
        # 过滤
        'filters': {
        },
        # 定义具体处理日志的方式
        'handlers': {
            # 默认记录所有日志
            'default': {
                'level': 'INFO',
                'class': 'logging.handlers.RotatingFileHandler',
                'filename': os.path.join(log_path, '{}.log'.format(time.strftime('%Y-%m-%d'))),
                'maxBytes': 1024 * 1024 * 5,  # 文件大小
                'backupCount': 5,  # 备份数
                'formatter': 'standard',  # 输出格式
                'encoding': 'utf-8',  # 设置默认编码,否则打印出来汉字乱码
            },
            # 输出错误日志
            'error': {
                'level': 'ERROR',
                'class': 'logging.handlers.RotatingFileHandler',
                'filename': os.path.join(log_path, '{}error.log'.format(time.strftime('%Y-%m-%d'))),
                'maxBytes': 1024 * 1024 * 5,  # 文件大小
                'backupCount': 5,  # 备份数
                'formatter': 'standard',  # 输出格式
                'encoding': 'utf-8',  # 设置默认编码
            },
            # 控制台输出
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',
                'formatter': 'standard'
            },
            # 输出info日志
            'info': {
                'level': 'INFO',
                'class': 'logging.handlers.RotatingFileHandler',
                'filename': os.path.join(log_path, '{}info.log'.format(time.strftime('%Y-%m-%d'))),
                'maxBytes': 1024 * 1024 * 5,
                'backupCount': 5,
                'formatter': 'standard',
                'encoding': 'utf-8',  # 设置默认编码
            },
        },
        # 配置用哪几种 handlers 来处理日志
        'loggers': {
            # 类型 为 django 处理所有类型的日志, 默认调用
            'django': {
                'handlers': ['default', 'console'],
                'level': 'INFO',
                'propagate': False
            },
            # log 调用时需要当作参数传入
            'log': {
                'handlers': ['error', 'info', 'console', 'default'],
                'level': 'INFO',
                'propagate': True
            },
        }
    }
    

      


    这样日志配置就完成了,在所有的py文件中都可以写log
    import logging
    logger = logging.getLogger('log')
    logger.info("登录成功啦~")
    logger.info("添加失败")
    

      

    8.配置自动生成接口文档

    电脑需要有npm或cnpm

    npm install apidoc -g

    安装后,项目下新建static文件夹,再建子文件夹apidoc

    url配置访问接口文档路由,APIDOC_ROOT

    setting.py

    配置apidoc路径

    APIDOC_ROOT = os.path.join(STATIC_ROOT, 'apidoc')
    

      

    配置url访问接口文档地址,注意线上环境 这个url注释掉

    from django.views.static import serve
    from django.conf import settings
    from webapi.api.daily import daily_add, daily_del, daily_upd, daily_query
    from webapi.api.weekly import weekly_add, weekly_del, weekly_upd, weekly_query
    urlpatterns = [
        # path('admin/', admin.site.urls),
        url(r'^apidoc/(?P<path>.*)$', serve, {'document_root': settings.APIDOC_ROOT}),
    ]
    

      

    这时候配置ok了,可以尝试在接口里添加注释(apidoc的注释规则)

    # 增
    class daily_add(APIView):
        def post(self, request):
            """
               @api {POST} /daily/add/ 添加日报
               @apiName dailyadd
               @apiGroup daily
               @apiDescription 日报添加接口
    
               @apiParam {String} name 姓名
               @apiParam {String} group 小组
               @apiParam {list} workinfo 工作内容
               @apiParam {String} updatename 更新人
    
    
               @apiSuccessExample Response-Success:
                   HTTP 1.1/ 200K
                   {
                                   "status": 200,
                                   "message": "添加日报成功",
    
                   }
               @apiErrorExample Response-Fail:
                   HTTP 1.1/ 404K
                   {
                       "status":404,
                       "message":"参数不正确"
                   }
               """
    

    接口配置注释后,生成文档

    apidoc -i api路径  -o static/apidoc
    

     

    没有报错就可以访问地址了

    9.启动项目

    cd 到项目下

    python manage.py runserver ip:port

    回车后,如下

    E:TestWebApi>python manage.py runserver 127.0.0.1:8100
    Performing system checks...

    System check identified no issues (0 silenced).
    July 21, 2018 - 16:10:11
    Django version 2.0.6, using settings 'TestWebApi.settings'
    Starting development server at http://127.0.0.1:8100/
    Quit the server with CTRL-BREAK.
    2018-07-21 16:10:16
    2018-07-21 16:15:16
    [21/Jul/2018 16:10:17] "POST /register/vercode/ HTTP/1.1" 200 83

  • 相关阅读:
    重构机房收费系统总结1之配置文件+反射+抽象工厂
    win7 下jenkins配置与使用
    ant-jmeter批量脚本
    ant批量运行Jmeter脚本遇到 Content is not allowed in prolog.问题及解决方案
    JMeter学习笔记--JMeter前置处理器
    JMeter学习笔记--详解JMeter定时器
    JMeter学习笔记--详解JMeter配置元件
    JMeter学习笔记--详解JMeter逻辑控制器
    JMeter学习笔记--JMeter监听器
    JMeter学习笔记--创建数据库测试计划
  • 原文地址:https://www.cnblogs.com/Jack-cx/p/9347394.html
Copyright © 2011-2022 走看看