赞
踩
完整版学生管理系统: 1、用户模块 2、学生模块 3、带模板 4、多表操作(一对一,一对多) 5、用户权限验证
完整代码:https://github.com/luo981695830/--self/tree/master/day6
关于项目的整个流程可以参照django个人笔记(二)https://blog.csdn.net/luo981695830/article/details/99701341
重点说一下部分:
1、添加应用
- INSTALLED_APPS = (
- 'django.contrib.admin',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- 'user',
- 'student'
- )
ps:常见问题,如果没有添加引用,数据库迁移同步的时候,不会生成迁移文件
2、主子路由分发
- from django.conf.urls import include, url
- from django.contrib import admin
- from user.views import index
-
- urlpatterns = [
- # Examples:
- # url(r'^$', 'day6.views.home', name='home'),
- # url(r'^blog/', include('blog.urls')),
-
- url(r'^admin/', include(admin.site.urls)),
- url(r'^$',index,name='index'),
- url(r'^user/',include('user.urls',namespace='user')),
- url(r'^student/',include('student.urls',namespace='student'))
- ]
3、用户模块路由分发
- from django.conf.urls import include, url
- from .views import user_register,user_logout,user_login
-
- urlpatterns = [
- url(r'user_register/$',user_register,name='user_register'),
- url(r'user_login/$',user_login,name='user_login'),
- url(r'user_logout/$',user_logout,name='user_logout'),
- ]
-
4、学生模块路由分发
- from django.conf.urls import include, url
- from django.contrib import admin
- from .views import student_add,student_update,student_all,student_del
-
- urlpatterns = [
- url(r'^student_add/$',student_add,name='student_add'),
- url(r'^student_update/(\d+)/$',student_update,name='student_update'),
- url(r'^student_all/$',student_all,name='student_all'),
- url(r'^student_del/(\d+)/$',student_del,name='student_del'),
- ]
-
5、学生模型
- from django.db import models
-
- # Create your models here.
- # # 自定义模型管理器
- # class StudentInfoManager(models.Manager):
- # # 修改管理器返回的原始查询集合
- # def all(self):
- # # 重写all 方法,返回性别='girl'的学生
- # return super(StudentInfoManager,self).all().filter(gender = 'girl')
- #
- # # 在模型类中自定义创建对象方法
- # def create_object(self,name,age,gender):
- # # 创建学生对象
- # student = StudentInfo()
- # # 获取数据
- # student.name = name
- # student.age = age
- # student.gender = gender
- # student.save()
- # return student
-
- class Banclass(models.Model):
- '''班级信息'''
- banname = models.CharField(max_length=20,verbose_name='班级名称')
-
- def __str__(self):
- return self.banname
-
- class Meta:
- verbose_name = '班级信息'
- verbose_name_plural = verbose_name
-
- class StudentInfo(models.Model):
- '''学生信息'''
- name = models.CharField(max_length=20,verbose_name='学生姓名')
- age = models.IntegerField(verbose_name='学生年龄')
- gender = models.CharField(choices=(('girl','女'),('boy','男')),default='girl',max_length=6,verbose_name='学生性别')
- ban = models.ForeignKey(Banclass,verbose_name='所属班级')
-
- def __str__(self):
- return self.name
-
- class Meta:
- verbose_name = '学生信息'
- verbose_name_plural = verbose_name
-
- class StudentId(models.Model):
- '''学号信息'''
- stuid = models.CharField(max_length=20,verbose_name='学号')
- student = models.OneToOneField(StudentInfo,verbose_name='所属学生')
-
- def __str__(self):
- return self.stuid
-
- class Meta:
- verbose_name = '学号信息'
- verbose_name_plural = verbose_name
6、迁移同步
python manage.py makemigrations
python manage.py migrate
7、用户模块逻辑
- from django.shortcuts import render,redirect
- from django.core.urlresolvers import reverse
- from django.contrib.auth.models import User
- from django.contrib.auth import authenticate,login,logout
-
- # Create your views here.
- def index(request):
- return render(request,'index.html')
-
- def user_register(request):
- if request.method == 'GET':
- return render(request,'register.html')
- else:
- username = request.POST.get('username',None)
- password = request.POST.get('password',None)
- password1 = request.POST.get('password1',None)
-
- user = User.objects.filter(username = username)
- if user:
- return render(request, 'register.html', {
- 'msg': '用户已存在'
- })
- else:
- if password == password1:
- user = User()
- user.username = username
- user.password = password
- user.set_password(password)
- user.save()
- return redirect(reverse('user:user_login'))
- else:
- return render(request, 'register.html', {
- 'msg': '两次输入的密码不一致'
- })
-
- def user_login(request):
- if request.method == 'GET':
- return render(request,'login.html')
- else:
- username = request.POST.get('username',None)
- password = request.POST.get('password',None)
- # 如果这个地方使用authenticate方法验证 在注册逻辑中 必须使用set_password方法
- a = authenticate(username=username,password=password)
- if a:
- login(request,a)
- return redirect(reverse('index'))
- else:
- return render(request, 'login.html', {
- 'msg': '用户名或密码错误'
- })
-
-
- def user_logout(request):
- logout(request)
- return redirect(reverse('index'))
8、学生模块逻辑
- from django.shortcuts import render,redirect
- from django.core.urlresolvers import reverse
- from django.contrib.auth.decorators import login_required
- from .models import StudentInfo,StudentId,Banclass
- # Create your views here.
- @login_required(login_url='/user/user_login/')
- def student_all(request):
- '''查看所有学生'''
- all_students = StudentInfo.objects.all()
- return render(request,'student_list.html',{
- 'all_students':all_students
- })
-
- @login_required(login_url='/user/user_login/')
- def student_add(request):
- '''添加学生'''
- if request.method == 'GET':
- return render(request,'student_add.html',{
- 'all_bans':Banclass.objects.all()
- })
- else:
- stuname = request.POST.get('stuname', None)
- stuage = request.POST.get('stuage', None)
- stugender = request.POST.get('stugender', None)
- stuban = request.POST.get('stuban', None)
- stuuid = request.POST.get('stuuid', None)
-
- student = StudentInfo()
- student.name = stuname
- student.age = stuage
- student.gender = stugender
- student.ban_id = Banclass.objects.filter(banname=stuban)[0].id
- student.save()
-
- studentid = StudentId()
- studentid.student_id = student.id
- studentid.stuid = stuuid
- studentid.save()
-
- return redirect(reverse('student:student_all'))
- @login_required(login_url='/user/user_login/')
- def student_del(request,stuid):
- '''删除学生'''
- student = StudentInfo.objects.filter(id = int(stuid))[0]
- student.studentid.delete()
- student.delete()
- return redirect(reverse('student:student_all'))
-
- @login_required(login_url='/user/user_login/')
- def student_update(request,stuid):
- '''修改学生'''
- if request.method == 'GET':
- student = StudentInfo.objects.filter(id = int(stuid))[0]
- all_bans = Banclass.objects.all()
- return render(request,'student_update.html',{
- 'student':student,
- 'all_bans':all_bans
- })
- else:
- stuname = request.POST.get('stuname',None)
- stuage = request.POST.get('stuage',None)
- stugender = request.POST.get('stugender',None)
- stuban = request.POST.get('stuban',None)
- stuuid = request.POST.get('stuuid',None)
-
- student = StudentInfo.objects.filter(id = int(stuid))[0]
- student.name = stuname
- student.age = stuage
- student.gender = stugender
- student.ban_id = Banclass.objects.filter(banname=stuban)[0].id
- student.save()
-
- studentid = student.studentid
- studentid.student_id = student.id
- studentid.stuid = stuuid
- studentid.save()
-
- return redirect(reverse('student:student_all'))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。