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

  • 相关阅读:
    js截取字符串区分汉字字母代码
    List 去处自定义重复对象方法
    63. Unique Paths II
    62. Unique Paths
    388. Longest Absolute File Path
    41. First Missing Positive
    140. Word Break II
    139. Word Break
    239. Sliding Window Maximum
    5. Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/Jack-cx/p/9347394.html
Copyright © 2011-2022 走看看