django-安装、创建项目、创建app、渲染html输出浏览器、log配置

安装django

命令行安装django

pip3 install django==1.11.9

或者通过pycharm安装
这里写图片描述

创建django项目

命令行创建django项目

django-admin startproject **

这里写图片描述

pycharm创建django项目
这里写图片描述

目录介绍

mysite/
├── manage.py  # 管理文件
└── mysite  # 项目目录
    ├── __init__.py
    ├── settings.py  # 配置
    ├── urls.py  # 路由 --> URL和函数的对应关系
    └── wsgi.py  # runserver命令就使用wsgiref模块做简单的web server

运行Django项目

通过命令行创建

python manage.py runserver

这里写图片描述

*命令行创建django项目*
这里写图片描述

实现简单的交互

HttpResponse
内部传入一个字符串参数,返回给浏览器

def index(request):
    # 业务逻辑代码
    return HttpResponse("OK")

在urls.py中添加如下代码:

from django.conf.urls import url
from django.contrib import admin
from django.shortcuts import HttpResponse


def index(request):

    return HttpResponse("hello sddjango")


urlpatterns = [
    # url(r'^admin/', admin.site.urls),

    url(r'index/',index),
]

这里写图片描述

实现渲染输出

除request参数外还接受一个待渲染的模板文件和一个保存具体数据的字典参数。

将数据填充进模板文件,最后把结果返回给浏览器。(类似于我们上面用到的jinja2)

看下项目目录结构
这里写图片描述

在settings.py中

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

TEMPLATES文件夹是存放模板的路径
看下项目中的模板index.html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>index</title>
    <link rel="stylesheet" href="/static/mystyle.css">
</head>
<body>

<form action="/index/" method="post">
    <p>姓名<input type="text" name="username"></p>
    <p>密码<input type="password" name="password"></p>
    <p><input type="submit" value="登录"></p>
    <p style="color: red">{{ key  }}</p>
</form>

</body>
</html>
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "mystatic"),  # 静态文件存放位置
]

这里是配置静态文件的,比如js文件、css文件等
我们看下我们项目中的mystyle.css

form {
    border: 1px solid green;
}

我们看下urls.py代码:

from django.conf.urls import url
from django.contrib import admin

from django.shortcuts import HttpResponse, render, redirect


def index(request):  # 所有跟请求相关的数据,都保存在request
    # 判断请求的类型是什么
    print("--->:", request)
    error_msg = ""
    if request.method == "POST":
        # 拿到form表单提交过来的数据
        name = request.POST.get("username")
        pwd = request.POST.get("password")

        print(request.POST)
        print(name, pwd)
        # 拿到用户提交的数据去数据库里面检索,能找到就表示登录成功,否则登录失败
        if name == "wyf" and pwd =="123456":
            return redirect("https://www.sogo.com")
        else:
            error_msg = "用户名密码错误"
    # return HttpResponse("<h1>hello world!</h1>")

    return render(request, "index.html", {"key": error_msg})


urlpatterns = [
    # url(r'^admin/', admin.site.urls),
    url(r'index/',index),
]

接下来进行测试

这里写图片描述

这里写图片描述

创建app

do命令行创建如下:
这里写图片描述

这里写图片描述

pycharm创建方式如下:
这里写图片描述

配置log日志

# 定义一下log文件存放的位置
BASE_LOG_DIR = os.path.join(BASE_DIR, "log")
# Django项目日志配置
LOGGING = {
    # 固定搭配的一个版本号
    'version': 1,
    # 禁用已经存在的logger实例
    'disable_existing_loggers': False,
    # 定义了三个日志打印或保存的格式
    'formatters': {
        # 标准的
        'standard': {
            'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'
                      '[%(levelname)s][%(message)s]'
        },
        # 简单的格式
        'simple': {
            'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
        },
        # 收集
        'collect': {
            'format': '[%(asctime)s]%(message)s'
        }
    },
    # 日志的过滤条件
    'filters': {
        # 需要debug=True
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },

    # 定义几个处理日志的方法
    'handlers': {
        # 把日志都打印到终端窗口
        'console': {
            'level': 'DEBUG',
            'filters': ['require_debug_true'],  # 只有在Django debug为True时才在屏幕打印日志
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        # 默认
        'default': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切
            'filename': os.path.join(BASE_LOG_DIR, "s8_info.log"),  # 日志文件
            'maxBytes': 1024 * 1024 * 50,  # 日志大小 50M
            'backupCount': 5,  # 日志文件个数
            'formatter': 'standard',
            'encoding': 'utf-8',
        },
        # 专门记录错误日志的
        'error': {
            'level': 'ERROR',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切
            'filename': os.path.join(BASE_LOG_DIR, "s8_err.log"),  # 日志文件
            'maxBytes': 1024 * 1024 * 50,  # 日志大小 50M
            'backupCount': 5,
            'formatter': 'standard',
            'encoding': 'utf-8',
        },
        'collect': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切
            'filename': os.path.join(BASE_LOG_DIR, "s8_collect.log"),
            'maxBytes': 1024 * 1024 * 50,  # 日志大小 50M
            'backupCount': 5,
            'formatter': 'collect',
            'encoding': "utf-8"
        }
    },
    # 最后处理logger实例的配置
    'loggers': {
       # 默认的logger应用如下配置
        '': {
            'handlers': ['default', 'console', 'error'],  # 上线之后可以把'console'移除
            'level': 'DEBUG',

        },
        # 名为 'collect'的logger还单独处理
        'collect': {
            'handlers': ['console', 'collect'],
            'level': 'INFO',
        },
        'collect.son': {
            'handlers': ['console',],
            'level': 'INFO',
            'propagate': False,
        }
    },
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值