Django框架:
Django是一个开放源代码的Web应用框架,由Python写成。由四部分组成,及MVT模型:
Model(模型):负责业务对象与数据库的对象
Template(模板):负责把数据展示给用户
View(视图):负责业务逻辑,并在适当的时候会调用Model和Template
流程图:
创建Django项目之后,系统会自动生成相关的文件,我们只需要对文件进行修改就可以了。
修改setting.py
"""
Django settings for djangoproject project.
Generated by 'django-admin startproject' using Django 2.2.6.
For more information on this file, see
https://docs.djangoproject.com/en/2.2/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.2/ref/settings/
"""
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'illub7ovd$x(q-0_5z6v-az$sa&0#n@chd^2kyy-!m=9$p9(i0'
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'shopapp.apps.ShopappConfig'
]
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',
]
ROOT_URLCONF = 'djangoproject.urls'
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',
],
},
},
]
WSGI_APPLICATION = 'djangoproject.wsgi.application'
# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'NAME':'db_test_shop1',
'HOST':'127.0.0.1',
'USER':'root',
'PASSWORD':'wuxiulai',
'PORT':'3306',
'OPTIONS':{'isolation_level':None}
}
}
# Password validation
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/2.2/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR,"static"),
)
# 配置输出sql语句
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level':'DEBUG',
},
}
}
views.py
from django.shortcuts import render
from django.http.response import HttpResponse
from shopapp.service.userservice import UserService
from shopapp.service.jobtaskservice import JobTaskService
import json
from shopapp.entity.jobtask import JobTask
import hashlib
import os
from .models import TUser
from django.core import serializers
from .models import JobDept
from _datetime import datetime
# Create your views here.
userService = UserService()
jobTaskService = JobTaskService()
def index(request):
return render(request,'index.html')
def goLogin(request):
return render(request,'login.html')
def login(request):
userName = request.POST.get('userName')
userPwd = request.POST.get('userPwd')
rememberMe = request.POST.get('rememberMe')
result = userService.findUserByUserName(userName)
isLogin =False
if result and (rememberMe ==None or rememberMe== 'false'):
if result and result[0][2]==hashlib.md5(userPwd.encode(encoding='utf-8')).hexdigest:
isLogin = True
elif result and rememberMe =="true":
if result[0][2] =='userPwd':
isLogin = True
userItem = {}
userItem['userId'] = result[0][0]
userItem['userName'] = result[0][1]
userItem['userPic'] = result[0][9]
userItem['userRole'] = result[0][10]
request.session['userName']=userName
request.session['user']=userItem
response = render(request,'main.html')
if rememberMe =='false':
response.set_cookie('useName',userName)
response.set_cookie('usePwd',result[0][2])
response.set_cookie('rememberMe','true')
elif rememberMe =='None':
response.delete_cookie('userName')
response.delete_cookie('userPwd')
response.delete_cookie('rememberMe')
return response
else:
return render(request,'login.html')
def logout(request):
request.session.flush()
return render(request,'login.html')
def goJobTaskInfo(requset):
return render(requset,"jobinfo/jobtaskinfo.html")
pass
def getJobTaskInfo(request):
jobTaskData = request.body.decode('utf-8')
jobTaskDict = json.loads(jobTaskData)
tData = {}
jobTask = JobTask()
jobTask.taskTitle = jobTaskDict.get('taskTitle')
jobTask.taskURL = jobTaskDict.get('taskURL')
currentPage = int(jobTaskDict.get('currentPage'))
pageSize = int(jobTaskDict.get('pageSize'))
opr = jobTaskDict.get('opr')
taskId = int(jobTaskDict.get('taskId'))
jobTask.taskId = taskId
updateResult = 0
if opr == 'del':
updateResult = jobTaskService.removeJobTask(taskId)
pass
elif opr == 'update':
tTask = jobTaskService.findJobTaskByJobTaskId(taskId)
tData['taskId'] = tTask.taskId
tData['taskTitle'] = tTask.taskTitle
tData['taskURL'] = tTask.taskURL
returnData = {'code': 1, 'jobTaskData': tData, 'pageSize': pageSize, 'currentPage': currentPage, 'opr':'update'}
return HttpResponse(json.dumps(returnData),content_type='application/json')
elif opr == 'submitUpdate':
updateResult = jobTaskService.updateJobTask(jobTask)
pass
result = jobTaskService.findPageJobTaskList(jobTask, pageSize, currentPage)
counts = jobTaskService.countJobTasks(jobTask)
totalPage = 0
if(counts%pageSize == 0):
totalPage = counts//pageSize
else:
totalPage = counts // pageSize + 1
pass
returnData = {'code':1, 'jobTaskData':result, 'pageSize':pageSize, 'currentPage':currentPage, 'totalPage':totalPage, 'updateResult':updateResult, 'opr':'search','counts':counts}
return HttpResponse(json.dumps(returnData),content_type='application/json')
pass
def getJobSalary(request):
result = jobTaskService.findJobMeanSalary()
returnData = {'code':1, 'salary':result}
r = json.dumps(returnData)
return HttpResponse(json.dumps(returnData),content_type='application/json')
pass
def goAjaxUserInfo(request):
return render(request,"systeminfo/userinfo.html")
pass
def getUserInfo(request):
userData = request.body
userDict = json.loads(userData)
tData = {}
user = TUser()
user.user_name = userDict.get('userName')
user.user_sex= userDict.get('userSex')
currentPage = int(userDict.get('currentPage'))
pageSize = int(userDict.get('pageSize'))
opr = userDict.get('opr')
userId = int(userDict.get('userId'))
user.user_id= userId
user.userDeptId = int(userDict.get('userDeptId'))
updateResult = 0
if opr == 'del':
updateResult = user.delete()
pass
elif opr == 'update':
tUser = TUser.objects.filter(user_id=userId).values('user_id','user_name','user_sex','jobDept_id','jobDept__dept_name')
tData['userId'] = tUser[0].get('user_id')
tData['userName'] = tUser[0].get('user_name')
tData['userSex'] = tUser[0].get('user_sex')
tData['userDeptId'] = tUser[0].get('jobDept_id')
tData['userDeptName'] = tUser[0].get('jobDept__dept_name')
returnData = {'code': 1, 'userData': tData, 'pageSize': pageSize, 'currentPage': currentPage, 'opr':'update'}
return HttpResponse(json.dumps(returnData),content_type='application/json')
elif opr == 'submitUpdate':
updateResult = TUser.objects.filter (user_id=userId).update(user_sex=user.user_sex)
pass
query = TUser.objects
if user.user_name:
query = query.filter(user_name__contains=user.user_name)
if user.user_sex:
query = query.filter(user_sex=user.user_sex)
startRow = (currentPage-1)*pageSize
endRow = currentPage*pageSize
result = query.values('user_id','user_name','user_sex','jobDept__dept_name')[startRow:endRow]
counts = query.count()
totalPage = 0
if(counts%pageSize == 0):
totalPage = counts//pageSize
else:
totalPage = counts // pageSize + 1
pass
# data = serializers.serialize('json',result,use_natural_foreign_keys=True)
# data = json.loads(data)
data = []
for tempUser in result:
dictItem={'pk':tempUser.get('user_id')}
fieldsItem={'user_name':tempUser.get('user_name'),
'user_sex':tempUser.get('user_sex'),
'user_deptname':tempUser.get('jobDept__dept_name')}
dictItem['fields'] = fieldsItem
data.append(dictItem)
# for tempUser,tdata in zip(result,data) :
# tdata['fields']['user_deptname'] = tempUser.jobDept.dept_name
returnData = {'code':1, 'userData':data, 'pageSize':pageSize, 'currentPage':currentPage, 'totalPage':totalPage, 'updateResult':updateResult, 'opr':'search','counts':counts}
return HttpResponse(json.dumps(returnData),content_type='application/json')
pass
def getDeptList(request):
parentId = int(request.GET.get('parentId'))
if parentId == 0:
result= JobDept.objects.filter(dept_parentid__isnull=True).all()
else:
result = JobDept.objects.filter(dept_parentid=parentId).all()
data = serializers.serialize('json',result)
data = json.loads(data)
return HttpResponse(json.dumps({'code':1,'data':data}),content_type='application/json')
def uploadFile(request):
# 后缀需要检查的
file = request.FILES.get('upload')
if file:
try:
with open (os.path.dirname(__file__) + os.sep + '..' + os.sep + 'static' + os.sep + 'uploads'+ os.sep + file.name,'wb') as fp:
for chunk in files.chunks():
fp.write(chunk)
except Exception as e:
return HttpResponse(json.dumps({'uploaded': 0, 'fileName': "", 'url': ""}),content_type='application/json')
pass
return HttpResponse(json.dumps({'uploaded': 1, 'fileName':file.name, 'url': os.sep + 'static' + os.sep + 'uploads'+ os.sep + file.name}),content_type='application/json')
else:
return HttpResponse(json.dumps({'uploaded': 0, 'fileName': "", 'url': ""}),content_type='application/json')
pass
def regist(request):
userDict = json.loads(request.body.decode('utf-8'))
# user = TUser()
# user.user_name = userDict.get('userName') # 表单提交的数据使用request.form[]
# user.user_pwd = hashlib.md5((userDict.get('userPwd')).encode(encoding='utf-8')).hexdigest()
# user.user_pic = userDict.get('userPic')
# user.user_birth = datetime.strptime(userDict.get('userBirth'),'%Y-%m-%d')
# user.user_sex = userDict.get('userSex')
# user.user_intro = userDict.get('userIntro')
# result = user.save()
# if result:
# result =1
# else:
# result =0
result = TUser.objects.create(
user_name = userDict.get('userName'),
user_pwd = hashlib.md5((userDict.get('userPwd')).encode(encoding='utf-8')).hexdigest(),
user_pic = userDict.get('userPic'),`在这里插入代码片`
user_birth = datetime.strptime(userDict.get('userBirth'),'%Y-%m-%d'),
user_sex = userDict.get('userSex'),
user_intro = userDict.get('userIntro')
)
if result:
result =1
else:
result =0
return HttpResponse(json.dumps({'result':result}),content_type='application/json')
pass
models.py(自动生成—> python manage.py inspectdb>models.py)
# This is an auto-generated Django model module.
# You'll have to do the following manually to clean this up:
# * Rearrange models' order
# * Make sure each model has one field with primary_key=True
# * Make sure each ForeignKey has `on_delete` set to the desired behavior.
# * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
# Feel free to rename the models, but don't rename db_table values or field names.
from django.db import models
class JobCollectTask(models.Model):
task_id = models.AutoField(primary_key=True)
task_title = models.CharField(max_length=128, blank=True, null=True)
task_url = models.CharField(max_length=1024, blank=True, null=True)
task_date = models.DateTimeField(blank=True, null=True)
task_state = models.IntegerField(blank=True, null=True)
task_total = models.IntegerField(blank=True, null=True)
class Meta:
managed = False
db_table = 'job_collect_task'
class JobDept(models.Model):
dept_id = models.IntegerField(primary_key=True)
dept_name = models.TextField(blank=True, null=True)
dept_parentid = models.CharField(max_length=45, blank=True, null=True)
class Meta:
managed = False
db_table = 'job_dept'
class JobPosition(models.Model):
job_id = models.AutoField(primary_key=True)
job_position = models.CharField(max_length=512, blank=True, null=True)
job_company = models.CharField(max_length=512, blank=True, null=True)
job_address = models.CharField(max_length=512, blank=True, null=True)
job_salary = models.CharField(max_length=45, blank=True, null=True)
job_date = models.CharField(max_length=45, blank=True, null=True)
job_taskid = models.IntegerField(blank=True, null=True)
job_degree = models.CharField(max_length=45, blank=True, null=True)
job_expyear = models.CharField(max_length=45, blank=True, null=True)
job_lowsalary = models.FloatField(blank=True, null=True)
job_highsalary = models.FloatField(blank=True, null=True)
job_meansalary = models.FloatField(blank=True, null=True)
job_city = models.CharField(max_length=128, blank=True, null=True)
class Meta:
managed = False
db_table = 'job_position'
class TUser(models.Model):
user_id = models.AutoField(db_column='USER_ID', primary_key=True) # Field name made lowercase.
user_name = models.CharField(db_column='USER_NAME', max_length=32, blank=True, null=True) # Field name made lowercase.
user_pwd = models.CharField(db_column='USER_PWD', max_length=512, blank=True, null=True) # Field name made lowercase.
user_age = models.IntegerField(db_column='USER_AGE', blank=True, null=True) # Field name made lowercase.
user_sex = models.IntegerField(db_column='USER_SEX', blank=True, null=True) # Field name made lowercase.
user_qq = models.IntegerField(db_column='USER_QQ', blank=True, null=True) # Field name made lowercase.
user_cellphone = models.CharField(db_column='USER_CELLPHONE', max_length=20, blank=True, null=True) # Field namemade lowercase.
user_money = models.FloatField(db_column='USER_MONEY', blank=True, null=True) # Field name made lowercase.
user_status = models.IntegerField(db_column='USER_STATUS', blank=True, null=True) # Field name made lowercase.
user_pic = models.CharField(db_column='USER_PIC', max_length=128, blank=True, null=True) # Field name made lowercase.
user_role = models.IntegerField(db_column='USER_ROLE', blank=True, null=True) # Field name made lowercase.
# user_deptid = models.ForeignKey(JobDept,models.DO_NOTHING,db_column='USER_ROLE', blank=True, null=True)
jobDept=models.ForeignKey(JobDept,on_delete=models.DO_NOTHING,blank=True,null=True)
user_birth = models.DateTimeField(db_column='USER_BIRTH', blank=True, null=True) # Field name made lowercase.
user_intro = models.TextField(db_column='USER_INTRO', blank=True, null=True) # Field name made lowercase.
# dept_id = ''
class Meta:
managed = False
db_table = 't_user'
运行效果可以参见博客,基于python Flask框架+jquary Ajax技术实现的增删改查(CRUD)
完整代码下载地址:Djangoproject.zip