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()