python django web开发示例

1.创建app

   选中项目名右击---django---create application  输入名称product

2.修改settings.py

    在installed_apps中添加product 

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'product',
]

   创建templates用于存放文件,修改配置文件访问目录

'DIRS': [BASE_DIR+"/templates",],

    修改静态文件的存放目录,如js,css和图片

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,"templates/static"),
]

    添加日志配置

LOGGING = {
    'version': 1,#指明dictConnfig的版本
    'disable_existing_loggers': False,# 设置True将禁用所有的已经存在的日志配置
    'formatters': {#格式器
        'verbose': {#详细
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        },
        'simple': {#简单
            'format': '%(levelname)s %(message)s'
        },
    },
     'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse',
        },
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'handlers': {#处理器,在这里定义了三个处理器
        # 'null': {#Null处理器,所有高于(包括)debug的消息会被传到/dev/null
        #     'level':'DEBUG',
        #     'class':'django.utils.log.NullHandler',
        # },
        'console':{#流处理器,所有的高于(包括)debug的消息会被传到stderr,使用的是simple格式器
            'level':'NOTSET',
            'class':'logging.StreamHandler',
            'formatter': 'simple'
        },
        'mail_admins': {# 邮件处理器,所有高于(包括)而error的消息会被发送给站点管理员,使用的是special格式器
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler',
            'filters': ['require_debug_false']
        },
        'file_handler': {# 文件处理器,所有高于(包括)而error的消息会被发送给站点管理员,使用的是special格式器
            'level': 'NOTSET',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'when':'W0',   # 日志文件每周第一天翻转
            'filename':BASE_DIR+"/templates/log/out.log",   #  日志文件的存储地址
            'backupCount':500,   # 最多可以保存500个文件
            'formatter':'verbose'
        }
    },
    'loggers': { # 定义了三个记录器
        'django': { # django记录器是捕捉所有消息的记录器,没有消息是直接发往django记录器的。使用null处理器,所有高于(包括)info的消息会被发往null处理器,向父层次传递信息
            'handlers':['console','file_handler'],
            'propagate': True,
            'level':'INFO',
        },
        'django.request': {#所有高于(包括)error的消息会被发往mail_admins处理器,消息不向父层次发送
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
        # 'myproject.custom': {# 所有高于(包括)info的消息同时会被发往console和mail_admins处理器,使用special过滤器
        #     'handlers': ['console', 'mail_admins'],
        #     'level': 'INFO',
        #     'filters': ['special']
        # }
    }
}

    添加数据库连接

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'NAME': 'pythondev',
        'USER': 'root',
        'PASSWORD': 'root',
    }
}

 3.在product目录下的model.py中,创建Entity类

from django.db import models
from django.contrib import admin
from cgi import maxlen

class Test1(models.Model) :
    title = models.CharField(max_length=150)
    context = models.TextField()
    createDate = models.DateTimeField()
    element = models.CharField(max_length=150)
    path = models.CharField(max_length=150)
    
    class Meta:
        #app_label = 'app01' #由于该model连接default数据库,所以在此无需指定
        db_table = 'test1'  #不加的话,表名会有前缀

 4.修改product目录下的views,用于处理前段请求

from django.shortcuts import render

from db.models import Test1
from django.template import loader,Context
from django.http.response import HttpResponse
from django.shortcuts import redirect,reverse
import logging

def toArchive(request):
    test1= Test1.objects.all()
    t = loader.get_template('archive.html')
    c = {'test1': test1}
    return HttpResponse(t.render(c))

def addArchive(request):
#    test1= Test1.objects.all()
#    c = {'test1': test1}
#    return render(request, "archive.html", c)
    if request.method == 'POST':
            element = request.POST['element']
            path = request.POST['path']
            title = request.POST['title']
            t = Test1(element=element,path=path,title=title);
            t.save()
            logger = logging.getLogger('django')
            logger.info("这是个日志");
            logger.error("这是个错误日志");
    return redirect(reverse('db:toAr'))

 4.修改product目录下的urls.py文件

from django.contrib import admin
from django.urls import path
from product.views import addArchive
from product.views import toArchive

app_name = 'product'
urlpatterns = [
    path('test1/',toArchive,name='toAr'), ##重定向url
    path('addArchive/',addArchive),
]

 5.创建根目录下view.py文件和url.py文件,用于处理非app的请求

    view.py

from django.shortcuts import render

def hello(request):
    context  =   {}
    context['c'] = "this is a hello"
   # return render(request, "hello.html", context)
    return render(request, "index.html", context)

    url.py

from django.contrib import admin
from django.urls import path,include
from . import view
from product.views import addArchive
from product.views import toArchive

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/',view.hello),
    path('test1/',toArchive),
    path('addArchive/',addArchive),
    path('productTest/',include('product.urls')),   ##请求会转发到product中处理
]

 6._init_.py文件,使用pymysql

import pymysql
 
pymysql.install_as_MySQLdb()