基于python Django框架+jquary Ajax技术实现的增删改查(CRUD)

3 篇文章 0 订阅
1 篇文章 0 订阅
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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值