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

Django:

  • Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。

  • MVC是众所周知的模式,即:将应用程序分解成三个组成部分:model(模型),view(视图),和 controller(控制 器)。
    其中:

    • M——管理应用程序的状态(通常存储到数据库中),并约束改变状态的行为(或者叫做“业务规则”)。
    • C——接受外部用户的操作,根据操作访问模型获取数据,并调用“视图”显示这些数据。控制器是将“模型”和“视图”隔离,并成为二者之间的联系纽带。
    • V——负责把数据格式化后呈现给用户。
  • Django也是一个MVC框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式:

    • M 代表模型(Model),即数据存取层。 该层处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。

    • T 代表模板(Template),即表现层。 该层处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。

    • V 代表视图(View),即业务逻辑层。 该层包含存取模型及调取恰当模板的相关逻辑。 你可以把它看作模型与模板之间的桥梁。

    • 在这里插入图片描述

    下面我们创建一个Django程序

    • 终端命令:django-admin startproject sitename (在当前目录下创建一个Django程序)

    话不多说 我们先看效果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    代码结构:在这里插入图片描述
    在这里插入图片描述
    主要代码代码:

    • djangoproject
      • 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 = '&cfuo-#5-gvv!ur)h3&=+9eq)1#3gl80@jc^f3^lpt4pzk(^(m'
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': 'db_test_shop1',
        'HOST':'127.0.0.1',
        'USER':'root',
        'PASSWORD':'root',
        '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',
        },
    },
    # Django自带的models  为了很好的观察控制台输出SQL语句。
    'loggers': {
        'django.db.backends': {   # 模型的日志输出
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
}

  • urls.py(配置 url地址 和函数的绑定关系 映射关系)
"""djangoproject URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from shopapp.views import *
# 类似于Falsk中的rout
# 配置 url地址  和函数的绑定关系 映射关系
urlpatterns = [
    path('admin/', admin.site.urls),
    path('',index),
    path('gologin/',goLogin),
    path('login/',login),
    path('logout.do',logout),
    path('regist.do',regist),
    path('upload.do',uploadFile),
    path('goajaxjobtaskinfo.do',goJobTaskInfo),
    path('ajaxjobtaskinfo.do',getJobTaskInfo),
    path('ajaxjobsalary.do',getJobSalary),
    path('goajaxuserinfo.do',goAjaxUserInfo),
    path('ajaxuserinfo.do',getUserInfo),
    path('getdeptinfo.do',getDeptList),
]

  • wsgi.py
"""
WSGI config for djangoproject project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/
"""

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoproject.settings')

application = get_wsgi_application()

  • shopapp
    • basedao.py
# 引入pymysql
import pymysql
import json
import logging
import os

class BaseDao(): # DAO: database access object

    def __init__(self, configFile='pymysql.json'):
        self.__connection = None
        self.__cursor = None
        self.__config = json.load(open(os.path.dirname(__file__) + os.sep + configFile, 'r'))  # 通过json配置获得数据的连接配置信息
        print(self.__config)
        pass

    # 获取数据库连接的方法
    def getConnection(self):
        # 当有连接对象时,直接返回连接对象
        if self.__connection:
            return self.__connection
        # 否则通过建立新的连接对象
        try:
            self.__connection = pymysql.connect(**self.__config)
            return self.__connection
        except pymysql.MySQLError as e:
            print("Exception:" + str(e))
            pass
        pass

    # 用于执行sql语句的通用方法 # sql注入
    def execute(self, sql, params=None):
        try:
            self.__cursor = self.getConnection().cursor()
            # result返回sql语句影响到的条数
            if params: # 带参数sql语句
                result = self.__cursor.execute(sql, params)
            else:      # 不带参数sql语句
                result = self.__cursor.execute(sql)
            return result
        except (pymysql.MySQLError, pymysql.DatabaseError, Exception) as e:
            print("出现数据库访问异常:" + str(e))
            self.rollback()
            pass
        finally:
            pass
        pass

    def fetch(self):
        if self.__cursor:
            return self.__cursor.fetchall()
        pass

    def fetchOne(self):
        if self.__cursor:
            return self.__cursor.fetchone()
        pass

    def commit(self):
        if self.__connection:
            self.__connection.commit()
        pass

    def rollback(self):
        if self.__connection:
            self.__connection.rollback()
        pass

    # 返回最后的自增主键
    def getLastRowId(self):
        if self.__cursor:
            return self.__cursor.lastrowid
        pass

    def close(self):
        if self.__cursor:
            self.__cursor.close()
        if self.__connection:
            self.__connection.close()
        pass

    pass



  • pymysql.json
{"host":"127.0.0.1", "user":"root","password":"root", "database":"db_test_shop1", "port":3306, "charset":"utf8"}
  • jobtaskdao
from .basedao import BaseDao

class JobTaskDao(BaseDao):

    def createJobTask(self, jobTask):
        try:
            sql = "insert into job_collect_task (task_title, job_url) values(%s, %s)"
            self.getConnection()
            result = self.execute(sql, (jobTask.taskTitle, jobTask.taskURL))
            self.commit() # 执行了sql语句之后要commit
            return result
        finally:
            self.close()
            pass
        pass

    def findJobTaskList(self, jobTask):
        try:
            params = []
            # sql语句和params就需要是动态
            sql = "select * from job_collect_task where 1=1 " #  where 1=1是为了便于增加and
            if jobTask.taskTitle:
                sql += " and task_title like %s "  # 模糊查询
                params.append('%'+jobTask.taskTitle + '%')
                pass
            if jobTask.taskURL:
                sql += " and task_url=%s"
                params.append(jobTask.taskURL)
                pass
            self.getConnection()
            self.execute(sql, params)
            result = self.fetch()
        finally:
            self.close()

        return result
        pass

    def removeJobTask(self, taskId):
        try:
            sql = "delete from job_collect_task where task_id=%s"
            self.getConnection()
            result = self.execute(sql, (taskId, ))
            self.commit()  # 执行了sql语句之后要commit
            return result
        finally:
            self.close()
            pass
        pass

    def findJobTaskByJobTaskId(self, taskId):
        try:
            sql = "select * from job_collect_task where task_id=%s"
            self.getConnection()
            self.execute(sql, (taskId,))
            result = self.fetch()
        finally:
            self.close()

        return result
        pass

    def updateJobTask(self, jobTask):
        try:
            sql = "update job_collect_task  set task_title=%s, task_url=%s where task_id=%s"
            self.getConnection()
            result = self.execute(sql, (jobTask.taskTitle, jobTask.taskURL, jobTask.taskId))
            self.commit()  # 执行了sql语句之后要commit
            return result
        finally:
            self.close()
            pass
        pass

    def findPageJobTaskList(self, jobTask, pageSize, currentPage):
        try:
            params = []
            # sql语句和params就需要是动态
            sql = "select task_id, task_title, task_url from job_collect_task where 1=1 "  # where 1=1是为了便于增加and
            if jobTask.taskTitle:
                sql += " and task_title like %s "  # 模糊查询
                params.append('%' + jobTask.taskTitle + '%')
                pass
            if jobTask.taskURL:
                sql += " and task_url=%s"
                params.append(jobTask.taskURL)
                pass

            startRow = (currentPage - 1)*pageSize

            sql += "limit %s, %s"
            params.append(startRow)
            params.append(pageSize)

            self.getConnection()
            self.execute(sql, params)
            result = self.fetch()
        finally:
            self.close()

        return result
        pass

    def countJobTasks(self, jobTask):
        params = []
        # sql语句和params就需要是动态
        sql = "select count(*) from job_collect_task where 1=1 "  # where 1=1是为了便于增加and
        if jobTask.taskTitle:
            sql += " and task_title like %s "  # 模糊查询
            params.append('%' + jobTask.taskTitle + '%')
            pass
        if jobTask.taskURL:
            sql += " and task_url=%s"
            params.append(jobTask.taskURL)
            pass

        self.getConnection()
        self.execute(sql, params)
        result = self.fetchOne()
        return result
        pass
    pass
  • userdao
from .basedao import BaseDao

class UserDao(BaseDao):

    def findUserByUserName(self, userName):
        try:
            sql = "select * from t_user where user_name=%s"
            self.getConnection()
            self.execute(sql, (userName,))
            result = self.fetch()
        finally:
            self.close()

        return result
        pass

    def createUser(self, user):
        try:
            params = [user.userName, user.userPwd]
            sql = "insert into t_user (user_name, user_pwd"
            values = " values (%s, %s"
            if user.userSex:
                sql += ",user_sex"
                values += ",%s"
                params.append(user.userSex)
                pass
            if user.userPic:
                sql += ",user_pic"
                values += ",%s"
                params.append(user.userPic)
                pass
            if user.userIntro:
                sql += ",user_intro"
                values += ",%s"
                params.append(user.userIntro)
                pass
            if user.userBirth:
                sql += ",user_birth"
                values += ",DATE_FORMAT(%s,'%%Y-%%m-%%d')"
                params.append(user.userBirth)
                pass
            sql +=")" + values + ")"
            self.getConnection()
            result = self.execute(sql, params)
            self.commit() # 执行了sql语句之后要commit
            return result
        except Exception as e:
            print(e)
            self.rollback()
        finally:
            self.close()
            pass
        pass

    def findUserList(self, user):
        try:
            params = []
            # sql语句和params就需要是动态
            sql = "select * from t_user where 1=1 " #  where 1=1是为了便于增加and
            if user.userName:
                sql += " and user_name like %s "  # 模糊查询
                params.append('%'+user.userName + '%')
                pass
            if user.userSex:
                sql += " and user_sex=%s"
                params.append(user.userSex)
                pass
            self.getConnection()
            self.execute(sql, params)
            result = self.fetch()
        finally:
            self.close()

        return result
        pass

    def removeUser(self, userId):
        try:
            sql = "delete from t_user where user_id=%s"
            self.getConnection()
            result = self.execute(sql, (userId, ))
            self.commit()  # 执行了sql语句之后要commit
            return result
        finally:
            self.close()
            pass
        pass

    def findUserByUserId(self, userId):
        try:
            sql = "select USER_ID,USER_NAME,USER_PWD,USER_AGE,USER_SEX,USER_QQ,USER_CELLPHONE," \
                  "USER_MONEY,USER_STATUS,USER_PIC,USER_INTRO,date_format(USER_BIRTH, '%%Y-%%m-%%d'),USER_DEPTID , dept_id, dept_name , user_role " \
                  "from t_user left join job_dept on t_user.user_deptid=job_dept.dept_id   where user_id=%s "  # where 1=1是为了便于增
            self.getConnection()
            self.execute(sql, (userId,))
            result = self.fetch()
        finally:
            self.close()

        return result
        pass

    def updateUser(self, user):
        try:
            params = [user.userSex]
            sql = "update t_user  set user_sex=%s "
            if user.userDeptId > 0:
                sql += ", user_deptid=%s"
                params.append(user.userDeptId)
            sql += ' where user_id=%s'
            params.append(user.userId)

            self.getConnection()
            result = self.execute(sql, params)
            self.commit()  # 执行了sql语句之后要commit
            return result
        except Exception as e:
            print(e)
        finally:
            self.close()
            pass
        pass

    def findPageUserList(self, user, pageSize, currentPage):
        try:
            params = []
            # sql语句和params就需要是动态
            sql = "select USER_ID,USER_NAME,USER_PWD,USER_AGE,USER_SEX,USER_QQ,USER_CELLPHONE," \
                  "USER_MONEY,USER_STATUS,USER_PIC,USER_INTRO,date_format(USER_BIRTH, '%%Y-%%m-%%d'),USER_DEPTID , dept_id, dept_name , user_role " \
                  "from t_user left join job_dept on t_user.user_deptid=job_dept.dept_id   where 1=1 "  # where 1=1是为了便于增加and
            if user.userName:
                sql += " and user_name like %s "  # 模糊查询
                params.append('%' + user.userName + '%')
                pass
            if user.userSex:
                sql += " and user_sex=%s"
                params.append(user.userSex)
                pass

            startRow = (currentPage - 1)*pageSize

            sql += "limit %s, %s"
            params.append(startRow)
            params.append(pageSize)

            self.getConnection()
            self.execute(sql, params)
            result = self.fetch()
        finally:
            self.close()

        return result
        pass

    def countUsers(self, user):
        params = []
        # sql语句和params就需要是动态
        sql = "select count(*) from t_user u left join job_dept d on u.user_deptid=d.dept_id  where 1=1 "  # where 1=1是为了便于增加and
        if user.userName:
            sql += " and user_name like %s "  # 模糊查询
            params.append('%' + user.userName + '%')
            pass
        if user.userSex:
            sql += " and user_sex=%s"
            params.append(user.userSex)
            pass

        self.getConnection()
        self.execute(sql, params)
        result = self.fetchOne()
        return result
        pass
    pass
  • entity
    • user.py(封装数据类)
# 封装数据类 VO:value object  entity 类
class User():
    def __init__(self):
        self.__userId = None
        self.__userName = None
        self.__userPwd = None
        self.__userSex = None
        self.__userPic = None
        self.__userBirth = None
        self.__userIntro = None
        self.__userDeptId = None
        self.__userDeptName = None
        self.__userRole = None
        pass

    @property
    def userId(self):
        return self.__userId
        pass

    @userId.setter
    def userId(self, userId):
        self.__userId = userId
        pass

    @property
    def userName(self):
        return self.__userName
        pass

    @userName.setter
    def userName(self, userName):
        self.__userName = userName
        pass

    @property
    def userPwd(self):
        return self.__userPwd
        pass

    @userPwd.setter
    def userPwd(self, userPwd):
        self.__userPwd = userPwd
        pass

    @property
    def userSex(self):
        return self.__userSex
        pass

    @userSex.setter
    def userSex(self, userSex):
        self.__userSex = userSex
        pass

    @property
    def userPic(self):
        return self.__userPic
        pass

    @userPic.setter
    def userPic(self, userPic):
        self.__userPic = userPic
        pass

    @property
    def userBirth(self):
        return self.__userBirth
        pass

    @userBirth.setter
    def userBirth(self, userBirth):
        self.__userBirth = userBirth
        pass

    @property
    def userIntro(self):
        return self.__userIntro
        pass

    @userIntro.setter
    def userIntro(self, userIntro):
        self.__userIntro = userIntro
        pass

    @property
    def userDeptId(self):
        return self.__userDeptId
        pass

    @userDeptId.setter
    def userDeptId(self, userDeptId):
        self.__userDeptId = userDeptId
        pass

    @property
    def userDeptName(self):
        return self.__userDeptName
        pass

    @userDeptName.setter
    def userDeptName(self, userDeptName):
        self.__userDeptName = userDeptName
        pass

    @property
    def userRole(self):
        return self.__userRole
        pass

    @userRole.setter
    def userRole(self, userRole):
        self.__userRole = userRole
        pass
    pass
  • service
    • userservice.py
from shopapp.dao.userdao import UserDao
from shopapp.entity.user import User

class UserService:

    def findUserByUserName(self, userName):
        userDao = UserDao()
        return userDao.findUserByUserName(userName)
        pass

    def createUser(self, user):
        userDao = UserDao()
        return userDao.createUser(user)
        pass

    def findUserList(self, user):
        userDao = UserDao()
        userlist = []
        result = userDao.findUserList(user)
        for temp in result:
            tuser = User()
            tuser.userId = temp[0]
            tuser.userName = temp[1]
            tuser.userSex = temp[4]
            userlist.append(tuser)
            pass
        return userlist
        pass

    def removeUser(self, userId):
        userDao = UserDao()
        return userDao.removeUser(userId)
        pass

    def findUserByUserId(self, userId):
        userDao = UserDao()
        result = userDao.findUserByUserId(userId)
        user = None
        if result:
            user = User()
            user.userId = result[0][0]
            user.userName = result[0][1]
            user.userSex = result[0][4]
            user.userDeptId = result[0][13]
            user.userDeptName = result[0][14]
            pass
        return user
        pass

    # 修改用户信息
    def updateUser(self, user):
        userDao = UserDao()
        return userDao.updateUser(user)
        pass

    def findPageUserList(self, user, pageSize, currentPage):
        userDao = UserDao()
        return userDao.findPageUserList(user, pageSize, currentPage)
        pass

    def countUsers(self, user):
        userDao = UserDao()
        return userDao.countUsers(user)[0]
        pass
    pass
  • jobtaskservice.py
from shopapp.dao.jobtaskdao import JobTaskDao
from shopapp.dao.jobpostiondao import JobPositionDao
from shopapp.entity.jobtask import JobTask

class JobTaskService:
    def createJobTask(self, jobTask):
        jobTaskDao = JobTaskDao()
        return jobTaskDao.createJobTask(jobTask)
        pass

    def findJobTaskList(self, jobTask):
        jobTaskDao = JobTaskDao()
        jobTasklist = []
        result = jobTaskDao.findJobTaskList(jobTask)
        for temp in result:
            tjobTask = JobTask()
            tjobTask.taskId = temp[0]
            tjobTask.taskTitle = temp[1]
            tjobTask.taskURL = temp[4]
            jobTasklist.append(tjobTask)
            pass
        return jobTasklist
        pass

    def removeJobTask(self, taskId):
        jobTaskDao = JobTaskDao()
        return jobTaskDao.removeJobTask(taskId)
        pass

    def findJobTaskByJobTaskId(self, taskId):
        jobTaskDao = JobTaskDao()
        result = jobTaskDao.findJobTaskByJobTaskId(taskId)
        jobTask = None
        if result:
            jobTask = JobTask()
            jobTask.taskId = result[0][0]
            jobTask.taskTitle = result[0][1]
            jobTask.taskURL = result[0][2]
            pass
        return jobTask
        pass

    # 修改用户信息
    def updateJobTask(self, jobTask):
        jobTaskDao = JobTaskDao()
        return jobTaskDao.updateJobTask(jobTask)
        pass

    def findPageJobTaskList(self, jobTask, pageSize, currentPage):
        jobTaskDao = JobTaskDao()
        return jobTaskDao.findPageJobTaskList(jobTask, pageSize, currentPage)
        pass

    def countJobTasks(self, jobTask):
        jobTaskDao = JobTaskDao()
        return jobTaskDao.countJobTasks(jobTask)[0]
        pass

    def findJobMeanSalary(self):
        jpd = JobPositionDao()
        return jpd.findPositionClassify()
        pass
    pass
  • admin.py
from django.contrib import admin

# Register your models here.
from shopapp.models import TUser
from shopapp.models import JobDept
admin.site.register(TUser)
admin.site.register(JobDept)

  • apps.py
from django.apps import AppConfig


class ShopappConfig(AppConfig):
    name = 'shopapp'

  • models.py
from django.db import models

class JobDept(models.Model):
    dept_id = models.IntegerField(primary_key=True)
    dept_name = models.TextField(max_length=45,blank=True, null=True)
    dept_parentid = models.IntegerField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'job_dept'

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 name made 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.

    jobDept = models.ForeignKey(JobDept, on_delete=models.CASCADE,blank=True, null=True) # Field name made lowercase.
    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.

    # jobDept_dept_id
    # jobDept_dept_name  偷偷生成
    class Meta:
        managed = False
        db_table = 't_user'
  • 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
from shopapp.entity.jobtask import JobTask
from .models import TUser
from .models import JobDept
from django.core import serializers
import json
import os
import hashlib
from _datetime import datetime

# Create your views here.
userService = UserService()
jobTaskService = JobTaskService()

# 显示主页面
def index(request):
    return render(request,'index.html')
    pass

# 去登陆页面
def goLogin(request):
    return render(request,'login.html')
    pass

# 显示登陆页面
def login(request):
    userName = request.POST.get('userName')
    userPwd = request.POST.get('userPwd')
    rememberMe = request.POST.get('rememberMe')
    isEncode = request.POST.get("isEncode")

    result = userService.findUserByUserName(userName)
    # isLogin = False
    # if result and (rememberMe == None or rememberMe =="false"):
    #     if result[0][2] == hashlib.md5(userPwd.encode(encoding='utf-8')).hexdigest():
    #         isLogin = True
    #         pass
    #     pass
    # elif result and rememberMe == "true":
    #     if result[0][2] == userPwd:
    #         isLogin = True
    #         pass
    #     pass

# 记住密码
    if isEncode=="0":
        userPwd = hashlib.md5(userPwd.encode(encoding='utf-8')).hexdigest()

    if result and userPwd==result[0][2]:
        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 == "rem":
            response.set_cookie('userName',userName)
            response.set_cookie('userPwd', userPwd)
            response.set_cookie('rememberMe', rememberMe)
            pass
        else:
            response.delete_cookie('userName')
            response.delete_cookie('userPwd')
            response.delete_cookie('rememberMe')
            pass

        return response
    else:
        return render(request,'login.html')
    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 = TUser.objects.create(
        user_name = userDict.get('userName'),  # 表单提交的数据使用request.form[]
        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

# 退出登陆
def logout(requets):
    requets.session.flush()
    return render(requets,"login.html")
    pass

# 去采集数据管理表页面
def goJobTaskInfo(request):
    return render(request,"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.decode('utf-8')

    userDict = json.loads(userData)
    tData = {}
    print(userDict,'*******')

    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.jobDept_id = 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,jobDept_id=user.jobDept_id)
        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)
        pass

    starRow = (currentPage-1)*pageSize
    endRow = currentPage*pageSize
    result = query.filter().values('user_id','user_name','user_sex','jobDept_id','jobDept__dept_name')[starRow:endRow]  # 会生成LIMIT 2 OFFSET 1

    counts = query.count()
    totalPage = 0

    if(counts%pageSize == 0):
        totalPage = counts//pageSize
    else:
        totalPage = counts // pageSize + 1
        pass

    # data = serializers.serialize("json",result)
    # data = json.loads(data)
    data = []
    for tempUser in result:
        dictItem = {'pk':tempUser.get('user_id'),}
        fieldItem = {'user_name':tempUser.get('user_name'),'user_sex':tempUser.get('user_sex'),'jobDept_id':tempUser.get('jobDept_id'),'user_deptname':tempUser.get('jobDept__dept_name')}
        dictItem['fields'] = fieldItem
        data.append(dictItem)
        pass
    '''
    for tempUser,tdata in zip(result,data):
        tdata['fields']['user_deptname'] = tempUser.jobDept.dept_name # 获取外键关联的时候  是第二次查询
        pass
    '''

    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'))
    print(parentId)
    if parentId<=0:
        result = JobDept.objects.filter(dept_parentid__isnull=True).all()
        pass
    else:
        result = JobDept.objects.filter(dept_parentid=parentId).all()
        pass

    data = serializers.serialize("json", result)
    data = json.loads(data)
    return HttpResponse(json.dumps({'code':1, 'data':data}), content_type="application/json")
    pass



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:# 保存文件到upload目录
                for chunk in file.chunks():
                    fp.write(chunk)
                    pass
        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


  • static
    • js
      • userdata.js
function getUserData(currentPage, pageSize, opr, userId) {
    var userName =  document.searchForm.userName.value
    var userSex = document.searchForm.userSex.value
    var userDeptId = 0
    if(opr == 'del'){
        if(!confirm('确定要删除吗?')){
            return false
        }
    }else if(opr == 'submitUpdate'){
        userName = document.userForm.userName.value
        userSex = document.userForm.userSex.value
        userId = document.userForm.userId.value
        currentPage = document.userForm.currentPage.value
        pageSize = document.userForm.pageSize.value
        userDeptId = document.userForm.userDeptId.value
    }
    $.ajax({
        type: 'post',                            // 传数据的方式
        url: '/ajaxuserinfo.do',
        dataType: 'json',                        // xml、json、script、html
        data: JSON.stringify({
            'userName': userName,     //  $('#userName') == document.getElementById('userName')
            'userSex': userSex,
            'userId': userId,
            'pageSize': pageSize,
            'userDeptId': userDeptId,
            'currentPage': currentPage,
            'opr': opr  // 重用一个ajax请求实现增加删除修改查询 CRUD
        }),
        error: function (xhr, err) {
            alert('请求失败,请检查,' + err + '!')
        },
        success: function (data, textStatus) {    // success对应的回调函数的第一个参数,是服务器返回的数据
            // data = JSON.parse(data)
            if (data.code == 1 && opr != 'update') {
                var htmlText = ""
                for (var i = 0; i < data.userData.length; i++) {
                    htmlText += '<tr>' +
                        '            <td align="center"><input type="checkbox" name="userId" value="' + data.userData[i].pk + '" /></td>\n' +
                        '            <td>' + data.userData[i].pk + '</td>\n' +
                        '            <td>' + data.userData[i].fields.user_name + '</td>\n' +
                        '            <td>' + (data.userData[i].fields.user_sex == 1?'男':'女') + '</td>\n' +
                        '            <td>' + data.userData[i].fields.user_deptname + '</td>\n' +
                        '            <td style="width: 160px;">\n' +
                        ' <button type="button" class="btn btn-danger" οnclick="getUserData(' + data.currentPage + ',' + data.pageSize + ',' + '\'del\'' + ',' + data.userData[i].pk + ')">删除</button>' +
                        ' <button type="button" class="btn btn-info" οnclick="getUserData(' + data.currentPage + ',' + data.pageSize + ',' + '\'update\'' + ',' + data.userData[i].pk + ')">修改</button>' +
                        '            </td>\n' +
                        '        </tr>\n'
                }
                pageText = '<tr style="text-align: right;"><td colspan="6">' + '当前第' + data.currentPage + '页&nbsp;&nbsp;总共有' + data.totalPage + '页&nbsp;&nbsp;';
                if (data.currentPage <= 1) {
                    pageText += '首页 &nbsp;&nbsp;上一页&nbsp;&nbsp;';
                } else {
                    pageText += '<a href="javascript:getUserData(1,10,\'search\', 0);">首页</a> &nbsp;&nbsp;' +
                        '<a href="javascript:getUserData(' + (data.currentPage - 1) + ', 10, \'search\', 0);">上一页</a>&nbsp;&nbsp;';
                }

                if (data.currentPage >= data.totalPage) {
                    pageText += '下一页&nbsp;&nbsp;尾页&nbsp;&nbsp;';
                } else {
                    pageText += '<a href="javascript:getUserData(' + (data.currentPage + 1) + ', 10, \'search\', 0);">下一页</a>&nbsp;&nbsp;' +
                        '<a href="javascript:getUserData(' + data.totalPage + ', 10, \'search\', 0);">尾页</a>&nbsp;&nbsp;';
                }
                pageText += '总共有' + data.counts + '条&nbsp;&nbsp;</td></tr>'
                $('#dataBody').empty()
                $('#dataBody').append(htmlText)
                $('#dataBody').append(pageText)

                document.searchForm.currentPage.value = data.currentPage
                document.searchForm.pageSize.value = data.pageSize

                if( opr != 'search' && data.updateResult > 0 ) {
                     alert("操作成功")
                     $('#modal-default').modal('hide')

                 }else if(opr != 'search' && data.updateResult <= 0){
                     alert("操作失败")
                 }

            } else if (data.code == 1 && opr == 'update') {
                document.userForm.userName.value = data.userData.userName
                if(data.userData.userSex == 1){
                    document.getElementById('male').checked = 'checked'
                }else if(data.userData.userSex == 2){
                    document.getElementById('female').checked = 'checked'
                }

                document.userForm.userSex.value = data.userData.userSex
                document.userForm.userId.value = data.userData.userId
                console.log(data.userData.userDeptName)
                $('#userDept').html(data.userData.userDeptName)
                document.userForm.currentPage.value = data.currentPage
                document.userForm.pageSize.value = data.pageSize
                document.userForm.userDeptId.value = data.userDeptId
                if (data.userDeptId =='undefined'){
                    document.userForm.userDeptId.value = 0
                }
                $('#modal-default').modal()
                getDeptList(0,null,1)
            }
        }

    });
}
//  修改弹出框
function getDeptList(parentId, obj, grade){
    if(parentId == -1){
        parentId = obj.value
        document.userForm.userDeptId.value = obj.value
    }else if(parentId == -99 || grade == 4){
        return false
    }
     $.ajax({
         type: 'get',                            // 传数据的方式
         url: '/getdeptinfo.do',
         data:{
             'parentId': parentId,     //  $('#userName') == document.getElementById('userName')
         },
         error: function (xhr, err) {
             alert('请求失败,请检查,' + err + '!')
         },
         success: function (data, textStatus) {    // success对应的回调函数的第一个参数,是服务器返回的数据
             // data = JSON.parse(data)
            if(parentId == 0){
                 if(data.code == 1){
                     htmlText = '<option value="-99">选择部门</option>'
                     for(var i=0;i<data.data.length;i++){
                         htmlText += '<option value="' + data.data[i].pk +'">' + data.data[i].fields.dept_name + '</option>'
                     }
                     $('#parentDept').html(htmlText)
                 }
            }else{
                if(data.code == 1 && grade == 2){
                     if(document.getElementById('gradeTwoDept')){
                        $('#gradeTwoDept').remove()
                     }
                     if(document.getElementById('gradeTreeDept')){
                         $('#gradeTreeDept').remove()
                     }
                     htmlText = '<select id="gradeTwoDept" οnchange="getDeptList(-1, this,3)" >'
                     htmlText += '<option value="-99">选择子部门</option>'
                     for(var i=0;i<data.data.length;i++){
                         htmlText += '<option value="' + data.data[i].pk +'">' + data.data[i].fields.dept_name + '</option>'
                     }
                     htmlText += "</select>"
                     $('#deptContainer').append(htmlText)
                 }else if(data.code == 1 && grade == 3){
                       if(document.getElementById('gradeTreeDept')){
                         $('#gradeTreeDept').remove()
                     }
                     htmlText = '<select id="gradeTreeDept" οnchange="getDeptList(-1, this, 4)" >'
                     htmlText += '<option value="-99">选择子部门</option>'
                     for(var i=0;i<data.data.length;i++){
                         htmlText += '<option value="' + data.data[i].pk +'">' + data.data[i].fields.dept_name + '</option>'
                     }
                     htmlText += "</select>"
                     $('#deptContainer').append(htmlText)
                }
            }
         }
     })
}
$(document).ready(
    function(){
        getUserData(1, 10, 'search', 0)
    }
)
  • jaotask.js
function getJobTaskData(currentPage, pageSize, opr, taskId) {

    var taskTitle =  document.searchForm.taskTitle.value
    var taskURL = document.searchForm.taskURL.value

    if(opr == 'del'){
        if(!confirm('确定要删除吗?')){
            return false
        }
    }else if(opr == 'submitUpdate'){
        taskTitle = document.taskForm.taskTitle.value
        taskURL = document.taskForm.taskURL.value
        taskId = document.taskForm.taskId.value
        currentPage = document.taskForm.currentPage.value
        pageSize = document.taskForm.pageSize.value
        $('#modal-default').modal('hide')
    }

    $.ajax({
        type: 'post',                            // 传数据的方式
        url: '/ajaxjobtaskinfo.do',
        dataType: 'json',                        // xml、json、script、html
        data:JSON.stringify({
            'taskTitle': taskTitle,     //  $('#taskTitle') == document.getElementById('taskTitle')
            'taskURL' : taskURL,
            'taskId': taskId,
            'pageSize': pageSize,
            'currentPage': currentPage,
            'opr': opr
        }),
        error: function(xhr, err){
            alert('请求失败,请检查,' + err + '!')
        },
        success: function(data, textStatus){    // success对应的回调函数的第一个参数,是服务器返回的数据
            // 查询后、删除后、修改后都走这个if
            if(data.code == 1 && opr != 'update'){
                var htmlText = ""
                for(var i =0;i <data.jobTaskData.length;i++){
                    htmlText += '<tr>' +
                        '            <td align="center"><input type="checkbox" name="taskId" value="'+  data.jobTaskData[i][0] +'" /></td>\n' +
                        '            <td>' + data.jobTaskData[i][0] + '</td>\n' +
                        '            <td>' + data.jobTaskData[i][1] + '</td>\n' +
                        '            <td style="width: 500px;word-break: break-all;">' + data.jobTaskData[i][2] + '</td>\n' +
                        '            <td style="width: 160px;">\n' +
                        ' <button type="button" class="btn btn-danger" οnclick="getJobTaskData('+ data.currentPage +',' + data.pageSize + ','+ '\'del\''+',' + data.jobTaskData[i][0] +')">删除</button>' +
                        ' <button type="button" class="btn btn-info" οnclick="getJobTaskData('+ data.currentPage +',' + data.pageSize + ','+ '\'update\''+',' + data.jobTaskData[i][0] +')">修改</button>'+
                        '            </td>\n' +
                        '        </tr>\n'
                }
                pageText = '<tr style="text-align: right;"><td colspan="5">'+ '当前第' + data.currentPage + '页&nbsp;&nbsp;总共有' + data.totalPage + '页&nbsp;&nbsp;';
                if(data.currentPage <= 1) {
                    pageText += '首页 &nbsp;&nbsp;上一页&nbsp;&nbsp;';
                }else{
                     pageText += '<a href="javascript:getJobTaskData(1,10,\'search\', 0);">首页</a> &nbsp;&nbsp;' +
                        '<a href="javascript:getJobTaskData(' + (data.currentPage - 1) + ', 10, \'search\', 0);">上一页</a>&nbsp;&nbsp;';
                }

                if(data.currentPage >= data.totalPage){
                     pageText += '下一页&nbsp;&nbsp;尾页&nbsp;&nbsp;';
                }else {
                    pageText += '<a href="javascript:getJobTaskData(' + (data.currentPage + 1) + ', 10, \'search\', 0);">下一页</a>&nbsp;&nbsp;' +
                    '<a href="javascript:getJobTaskData(' + data.totalPage + ', 10, \'search\', 0);">尾页</a>&nbsp;&nbsp;';
                }
                pageText +='总共有'+ data.counts + '条&nbsp;&nbsp;</td></tr>'
                $('#dataBody').empty()
                $('#dataBody').append(htmlText)
                $('#dataBody').append(pageText)

                document.searchForm.currentPage.value = data.currentPage
                document.searchForm.pageSize.value=data.pageSize

                 if( opr != 'search' && data.updateResult > 0 ) {
                     alert("操作成功")
                 }else if(opr != 'search' && data.updateResult <= 0){
                     alert("操作失败")
                 }
            }else if(data.code == 1 && opr == 'update'){
                document.taskForm.taskTitle.value = data.jobTaskData.taskTitle
                document.taskForm.taskURL.value = data.jobTaskData.taskURL
                document.taskForm.taskId.value = data.jobTaskData.taskId
                document.taskForm.currentPage.value = data.currentPage
                document.taskForm.pageSize.value = data.pageSize
                $('#modal-default').modal()
            }
        }
    });
}
$(document).ready(
    function(){
        getJobTaskData(1, 10, 'search', 0)
    }
)
  • templates
    • systeminfo
      • userinfo.html
{% include 'top.html' %}
{% include 'left.html' %}
{% load static %}
<div class="content-wrapper">
    <!-- Content Header (Page header) -->
    <section class="content-header">
      <h1>
        系统管理
        <small>用户信息管理</small>
      </h1>
      <ol class="breadcrumb">
        <li><a href="#"><i class="fa fa-dashboard"></i> 系统管理</a></li>
        <li><a href="#">系统用户</a></li>
        <li class="active">用户信息管理</li>
      </ol>
    </section>
    <!-- Main content -->
    <section class="content">
      <div class="row">
        <div class="col-xs-12">
          <div class="box">
            <div class="box-header">
              <h3 class="box-title">用户信息</h3>
            </div>
            <!-- /.box-header -->
            <div class="box-body">
                <form method="post" name="searchForm" class="form-inline">
                <div class="form-group">
                    <div class="form-group">
                    <label class="control-label" for="userName">用户名:</label>
                    <input type="text" name="userName" class="form-control" id="userName"/>
                    </div>
                    <div class="form-group">
                        <label for="userSex"  class="control-label">性别:
                            <input type="radio"  name="userSex" value="1">男&nbsp;&nbsp;
                            <input type="radio"  name="userSex" value="2">女&nbsp;&nbsp;
                        </label>
                    </div>
                            <input type="hidden" name="currentPage" value="1"/>
                            <input type="hidden" name="pageSize" value="10"/>
                    <button class="btn btn-primary" type="button" οnclick="getUserData(1, 10, 'search', 0)">查询</button>
                    <button class="btn btn-primary" type="button" οnclick="javascript:document.searchForm.reset();">重置</button>

                </div>
                </form>
                <table class="table table-responsive table-bordered">
                    <caption>{{ message }}</caption>
                    <thead>
                        <tr>
                            <th style="text-align: center;width: 80px;">
                                <input type="button" value="全选"/>
                            </th>
                             <th>用户ID</th>
                             <th>用户名</th>
                             <th>用户性别</th>
                             <th>部门</th>
                             <th>操作</th>
                        </tr>
                    </thead>
                    <tbody id="dataBody">
                    </tbody>
                </table>
                    <div class="modal fade" id="modal-default">
                          <div class="modal-dialog">
                            <div class="modal-content">
                              <div class="modal-header">
                                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                  <span aria-hidden="true">&times;</span></button>
                                <h4 class="modal-title">修改用户信息</h4>
                              </div>
                              <div class="modal-body">
                                     <form method="post" name="userForm" >
                                         <div class="form-group">
                                            <label for="userName"  class="control-label">用户名:</label>
                                           <input type="text" name="userName"  class="form-control"/>
                                         </div>
                                          <div class="form-group">
                                            <label for="userSex"  class="control-label">性别:
                                                <input type="radio" id="male" name="userSex" value="1">男&nbsp;&nbsp;
                                                <input type="radio" id="female" name="userSex" value="2">女&nbsp;&nbsp;
                                            </label>
                                          </div>
                                          <div class="form-group">
                                            <label for="userDept"  class="control-label">部门:
                                                <span id="userDept"></span>
                                                <input type="hidden" name="userDeptId" id="userDeptId" value='0'>
                                                <div id="deptContainer">
                                                    <select id="parentDept" οnchange="getDeptList(-1, this, 2)">
                                                        <option value="-99">选择部门</option>
                                                    </select>
                                                </div>
                                            </label>
                                          </div>
                                        <input type="hidden" name="userId"/>
                                        <input type="hidden" name="currentPage" value="1"/>
                                        <input type="hidden" name="pageSize" value="10"/>
                                    </form>
                              </div>
                              <div class="modal-footer">
                                <button type="button" class="btn btn-default pull-left" data-dismiss="modal">取消</button>
                                <button type="button" class="btn btn-primary" οnclick="getUserData(1, 10, 'submitUpdate', 0)">保存</button>
                              </div>
                            </div>
                            <!-- /.modal-content -->
                          </div>
                          <!-- /.modal-dialog -->
                    </div>
            </div>
            <!-- /.box-body -->
          </div>
          <!-- /.box -->
        </div>
        <!-- /.col -->
      </div>
      <!-- /.row -->
    </section>
    <!-- /.content -->
  </div>
  <!-- /.content-wrapper -->
{% include 'footer.html' %}

<script type="text/javascript" src="{% static 'js/formvalidator.js' %}"></script>
<script type="text/javascript" src="{% static 'js/userdata.js' %}"></script>
  • jobinfo
    • jobtaskinfo.html
{% include 'top.html' %}
{% include 'left.html' %}
{% load static %}
<div class="content-wrapper">
    <!-- Content Header (Page header) -->
    <section class="content-header">
      <h1>
        系统管理
        <small>任务信息管理</small>
      </h1>
      <ol class="breadcrumb">
        <li><a href="#"><i class="fa fa-dashboard"></i> 采集管理</a></li>
        <li><a href="#">系统任务</a></li>
        <li class="active">任务信息管理</li>
      </ol>
    </section>
    <!-- Main content -->
    <section class="content">
      <div class="row">
        <div class="col-xs-12">
          <div class="box">
            <div class="box-header">
              <h3 class="box-title">任务信息</h3>
            </div>
            <!-- /.box-header -->
            <div class="box-body">
                <form method="post" name="searchForm" class="form-inline">
                <div class="form-group">
                    <div class="form-group">
                    <label class="control-label" for="taskTitle">任务名:</label>
                    <input type="text" name="taskTitle" class="form-control" id="taskTitle"/>
                    </div>
                    <div class="form-group">
                    <label class="control-label" for="taskURL">任务地址: </label>
                    <input type="text" name="taskURL"  class="form-control" id="taskURL" />
                    </div>
                            <input type="hidden" name="currentPage" value="1"/>
                            <input type="hidden" name="pageSize" value="10"/>

                    <button class="btn btn-primary" type="button"  οnclick="getJobTaskData(1, 10, 'search', 0)">查询</button>

                </div>
                </form>
                <table class="table table-responsive table-bordered">
                    <caption>{{ message }}</caption>
                    <thead>
                        <tr>
                            <th style="text-align: center;width: 80px;">
                                <input type="button" value="全选"/>
                            </th>
                             <th>任务ID</th>
                             <th>任务名称</th>
                             <th style="width: 300px;word-wrap: break-word;overflow: hidden;">任务URL地址</th>
                             <th>操作</th>
                        </tr>
                    </thead>
                    <tbody id="dataBody">
                    </tbody>
                </table>
                    <div class="modal fade" id="modal-default">
                          <div class="modal-dialog">
                            <div class="modal-content">
                              <div class="modal-header">
                                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                  <span aria-hidden="true">&times;</span></button>
                                <h4 class="modal-title">修改任务信息</h4>
                              </div>
                              <div class="modal-body">
                                     <form method="post" name="taskForm">
                                         任务名称:<input type="text" name="taskTitle" />
                                         采集URL地址:  <input type="text" name="taskURL" />
                                        <input type="hidden" name="taskId"/>
                                        <input type="hidden" name="currentPage" value="1"/>
                                        <input type="hidden" name="pageSize" value="10"/>
                                    </form>
                              </div>
                              <div class="modal-footer">
                                <button type="button" class="btn btn-default pull-left" data-dismiss="modal">取消</button>
                                <button type="button" class="btn btn-primary" οnclick="getJobTaskData(1, 10, 'submitUpdate', 0)">保存</button>
                              </div>
                            </div>
                            <!-- /.modal-content -->
                          </div>
                          <!-- /.modal-dialog -->
                    </div>
            </div>
            <!-- /.box-body -->
          </div>
          <!-- /.box -->
        </div>
        <!-- /.col -->
      </div>
      <!-- /.row -->
    </section>
    <!-- /.content -->
  </div>
  <!-- /.content-wrapper -->
{% include 'footer.html' %}
<script type="text/javascript" src="{% static 'js/jobtask.js' %}"></script>
  • manage.py(程序启动入口)
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys


def main():
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoproject.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)


if __name__ == '__main__':
    main()

还请大神,多多指点。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值