django+pymysql搭建一个管理系统(一)
发布时间:2020-12-20 11:00:59 所属栏目:Python 来源:网络整理
导读:django+pymysql搭建一个管理系统(一) 后续进行代码更新,优化 一.程序架构 二.mysql表单创建 zouye 库:存信息相关的 #班级表create table classes(cid int primary key auto_increment,name varchar(32) not null default ‘‘)engine=Innodb charset=utf8;in
django+pymysql搭建一个管理系统(一)
一.程序架构二.mysql表单创建
#班级表 create table classes( cid int primary key auto_increment,name varchar(32) not null default ‘‘ )engine=Innodb charset=utf8; insert into classes (name) values (‘三年A班‘),(‘三年B班‘),(‘三年C班‘); #学生表 create table students ( sid int primary key auto_increment,name varchar(32) not null default ‘‘,class_id int not null default 1,foreign key (class_id) references classes(cid) )engine=Innodb charset=utf8; insert into students (name,class_id) values (‘张三‘,1),(‘李四‘,2),(‘王五‘,1); #老师表 create table teacher ( tid int primary key auto_increment,name varchar(32) not null default ‘‘ )engine=Innodb charset=utf8; insert into teacher (name) values (‘老师1‘),(‘老师2‘),(‘老师3‘); #关系表 create table teacher2class ( id int primary key auto_increment,tid int not null default 1,cid int not null default 1 )engine=Innodb charset=utf8; insert into teacher2class (tid,cid) values (1,(1,(2,2);
create table info(id int,name char(30),password char(30)) charset utf8; 三.settings文件的设置
""" Django settings for my2 project. Generated by ‘django-admin startproject‘ using Django 1.11.22. For more information on this file,see https://docs.djangoproject.com/en/1.11/topics/settings/ For the full list of settings and their values,see https://docs.djangoproject.com/en/1.11/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/1.11/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = ‘&biab7*[email?protected]*v%3gmz%icp0do^i92iq&m0([email?protected]%‘ # 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‘,] 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 = ‘my2.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 = ‘my2.wsgi.application‘ # Database # https://docs.djangoproject.com/en/1.11/ref/settings/#databases DATABASES = { ‘default‘: { ‘ENGINE‘: ‘django.db.backends.sqlite3‘,‘NAME‘: os.path.join(BASE_DIR,‘db.sqlite3‘),} } # Password validation # https://docs.djangoproject.com/en/1.11/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/1.11/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/1.11/howto/static-files/ STATIC_URL = ‘/static/‘ STATICFILES_DIRS = (os.path.join(BASE_DIR,‘static‘),) 四.路由
"""my2 URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/1.11/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: url(r‘^$‘,views.home,name=‘home‘) Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: url(r‘^$‘,Home.as_view(),name=‘home‘) Including another URLconf 1. Import the include() function: from django.conf.urls import url,include 2. Add a URL to urlpatterns: url(r‘^blog/‘,include(‘blog.urls‘)) """ import pymysql from django.conf.urls import url from django.contrib import admin from django.shortcuts import HttpResponse,render,redirect def login_deco(func): def wrapper(request): print(request.COOKIES) if request.COOKIES: res = func(request) return res else: return redirect(‘/login/‘) return wrapper def mysql_to_db(db): conn = pymysql.connect( host=‘127.0.0.1‘,port=3306,user=‘root‘,password=‘16745‘,db=db ) cursor = conn.cursor(pymysql.cursors.DictCursor) return cursor,conn def login(request): if request.method == ‘GET‘: return render(request,‘login.html‘) cursor,conn = mysql_to_db(‘userinfo‘) user_name = request.POST.get(‘username‘) user_pwd = request.POST.get(‘pwd‘) sql = ‘select * from info where name=%s and password=%s‘ cursor.execute(sql,(user_name,user_pwd)) a = cursor.fetchall() if a: obj = redirect(‘/class/‘) obj.set_cookie(‘login‘,‘success‘) return obj else: return render(request,‘login.html‘,{‘msg‘: ‘登入失败‘}) def register(request): if request.method == ‘GET‘: return render(request,‘register.html‘) cursor,conn = mysql_to_db(‘userinfo‘) user_name = request.POST.get(‘username‘) user_pwd = request.POST.get(‘pwd‘) print(user_name,user_pwd) sql = ‘select name from info where name=%s‘ x = cursor.execute(sql,(user_name)) print(‘231‘) if not x: sql = ‘insert into info(name,password) values(%s,%s) ‘ cursor.execute(sql,user_pwd)) a = cursor.fetchall() return render(request,‘register.html‘,{‘msg‘: ‘注册成功‘}) else: return render(request,{‘msg‘: ‘登入失败‘}) @login_deco def show_class(request): if request.method == ‘GET‘: cursor,conn = mysql_to_db(‘zuoye‘) if not request.GET: sql = ‘select * from classes‘ cursor.execute(sql) info = cursor.fetchall() print(info) return render(request,‘show_class.html‘,{‘dict_list‘: info}) else: deleter_id = request.GET.get(‘id‘) sql = ‘delete from classes where cid=%s ‘ try: a = cursor.execute(sql,(deleter_id,)) conn.commit() obj = redirect(‘/class/‘) return obj except: sql = ‘select * from classes‘ cursor.execute(sql) info = cursor.fetchall() obj = render(request,{‘dict_list‘: info,‘msg‘: ‘内容有关联无法删除 ‘}) return obj def add(request): if request.method == ‘GET‘: return render(request,‘add.html‘) else: if not request.POST.get(‘classname‘): return render(request,‘add.html‘,{‘msg‘: ‘输入内容不能为空‘}) else: classname = request.POST.get(‘classname‘) print(classname) cursor,conn = mysql_to_db(‘zuoye‘) sql = ‘insert into classes(name) values(%s)‘ cursor.execute(sql,(classname,)) conn.commit() return redirect(‘/class/‘) def up(request): id = request.GET.get(‘id‘) name = request.GET.get(‘name‘) print(id) print(name) if request.method == ‘GET‘: return render(request,{‘name‘: name}) else: if not request.POST.get(‘classname‘): return render(request,conn = mysql_to_db(‘zuoye‘) sql = ‘update classes set name=%s where cid = %s‘ cursor.execute(sql,id)) conn.commit() return redirect(‘/class/‘) def ajax_add(request): class_name = request.POST.get(‘classname‘) if class_name: cursor,conn = mysql_to_db(‘zuoye‘) sql = ‘insert into classes(name) values(%s)‘ cursor.execute(sql,(class_name,)) conn.commit() return HttpResponse(‘OK‘) else: return HttpResponse(‘不能为空‘) def ajax_up(request): print(request.POST) class_name = request.POST.get(‘name‘) id = request.POST.get(‘id‘) # print(class_name,id) if class_name: cursor,conn = mysql_to_db(‘zuoye‘) sql = ‘update classes set name=%s where cid = %s‘ cursor.execute(sql,id)) conn.commit() return HttpResponse(‘OK‘) else: return HttpResponse(‘不能为空‘) def ajax_deleter(request): id = request.POST.get(‘id‘) try: cursor,conn = mysql_to_db(‘zuoye‘) sql = ‘delete from classes where cid=%s ‘ cursor.execute(sql,(id,)) conn.commit() return HttpResponse(‘OK‘) except: return HttpResponse(‘11‘) @login_deco def student(request): cursor,conn = mysql_to_db(‘zuoye‘) if request.method == ‘GET‘: sql_1 = ‘SELECT sid,students.name as sname,cid,classes.name as cname from students,classes where class_id=cid‘ sql_2 = ‘SELECT * from classes‘ cursor.execute(sql_1) student_info = cursor.fetchall() cursor.execute(sql_2) class_info = cursor.fetchall() return render(request,‘show_student.html‘,{‘student‘: student_info,‘class‘: class_info}) else: if request.POST.get(‘action‘) == ‘add‘: sql_1 = ‘SELECT sid,classes where class_id=cid‘ sql_2 = ‘SELECT * from classes‘ cursor.execute(sql_1) student_info = cursor.fetchall() cursor.execute(sql_2) class_info = cursor.fetchall() print(request.POST) name = request.POST.get(‘name‘) id = request.POST.get(‘id‘) print(name,id) if name: sql = ‘insert into students(name,class_id) values(%s,%s)‘ cursor.execute(sql,(name,id)) conn.commit() return redirect(‘/student/‘) else: return render(request,‘class‘: class_info,‘addmsg‘: ‘名字不能为空‘}) elif request.POST.get(‘action‘) == ‘up‘: print(request.POST) sql_1 = ‘SELECT sid,classes where class_id=cid‘ sql_2 = ‘SELECT * from classes‘ cursor.execute(sql_1) student_info = cursor.fetchall() cursor.execute(sql_2) class_info = cursor.fetchall() print(request.POST) name = request.POST.get(‘sname‘) sid = request.POST.get(‘sid‘) cid = request.POST.get(‘cid‘) print(name,sid,cid) if name: sql = ‘update students set name=%s,class_id=%s where sid=%s‘ cursor.execute(sql,sid)) conn.commit() return redirect(‘/student/‘) else: return render(request,‘upmsg‘: ‘名字不能为空‘}) @login_deco def teacher(request): cursor,conn = mysql_to_db(‘zuoye‘) if request.method == ‘GET‘: sql = ‘SELECT teacher.tid,teacher.name,GROUP_CONCAT(classes.name) as cname FROM teacher left JOIN teacher2class ON teacher.tid=teacher2class.tid LEFT JOIN classes ON classes.cid=teacher2class.cid GROUP BY teacher.tid‘ cursor.execute(sql) info = cursor.fetchall() sq1_teacher = ‘select * from teacher‘ cursor.execute(sq1_teacher) teacher_info = cursor.fetchall() sq1_teacher = ‘select * from classes‘ cursor.execute(sq1_teacher) class_info = cursor.fetchall() print(info) print(teacher_info) print(class_info) obj = render(request,‘show_teacher.html‘,{‘info‘: info,‘class_info‘: class_info,‘teacher_info‘: teacher_info}) return obj else: if request.POST.get(‘action‘) == ‘add‘: tid = request.POST.get(‘tid‘) cid = request.POST.get(‘cid‘) sql = ‘insert into teacher2class(cid,tid) values(%s,%s)‘ cursor.execute(sql,(cid,tid)) conn.commit() obj = redirect(‘/teacher/‘) return obj if request.POST.get(‘action‘) == ‘delete‘: tid = request.POST.get(‘tid‘) cid = request.POST.get(‘cid‘) sql = ‘delete from teacher2class where cid=%s and tid=%s‘ a = cursor.execute(sql,tid)) conn.commit() if a: obj = redirect(‘/teacher/‘) return obj else: sql = ‘SELECT teacher.tid,GROUP_CONCAT(classes.name) as cname FROM teacher left JOIN teacher2class ON teacher.tid=teacher2class.tid LEFT JOIN classes ON classes.cid=teacher2class.cid GROUP BY teacher.tid‘ cursor.execute(sql) info = cursor.fetchall() sq1_teacher = ‘select * from teacher‘ cursor.execute(sq1_teacher) teacher_info = cursor.fetchall() sq1_teacher = ‘select * from classes‘ cursor.execute(sq1_teacher) class_info = cursor.fetchall() obj = render(request,‘teacher_info‘: teacher_info,‘delete_msg‘: ‘该老师没有教这个班级‘}) return obj def run(request): return redirect(‘/login/‘) urlpatterns = [ url(r‘^admin/‘,admin.site.urls),url(r‘^login/‘,login),url(r‘^register/‘,register),url(r‘^class/‘,show_class),url(r‘^add/‘,add),url(r‘^up/‘,up),url(r‘^ajax_add/‘,ajax_add),url(r‘^ajax_up/‘,ajax_up),url(r‘^ajax_deleter/‘,ajax_deleter),url(r‘^student/‘,student),url(r‘^teacher/‘,teacher),url(r‘‘,run),] 五.html相关文件1.母版
|