简单后端django(未完)

主要功能 

登录、注册、主页显示个人信息、成绩查询

pycharm社区版创建django项目

第一步

 第二步

打开cmd

进入到你想要创建的项目的目录下(……pythonProject3>

django-admin startproject mysite

创建app

在pycharm终端进入mysite目录(包含manage.py的目录

python manage.py startapp login

设置时区、语言

settings文件中修改

# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/

LANGUAGE_CODE = 'zh-hans'     # 这里修改了

TIME_ZONE = 'Asia/Shanghai'    # 这里修改了

USE_I18N = True

USE_L10N = True

USE_TZ = False    # 这里修改了

数据库模型设计

学生登录:

  • 学号
  • 名字
  • 密码

学生信息:

  • 学号
  • 名字
  • 电话
  • 地址
  • 学院
  • 专业

课程成绩:

  • 学号
  • 课程
  • 成绩

进入models文件

from django.db import models

# Create your models here.
# 课程成绩表
class CourseModel(models.Model):
    cour_id = models.CharField(max_length=15, verbose_name='学生ID')
    course = models.CharField(max_length=30, verbose_name='课程')
    grade = models.IntegerField(default=60, verbose_name='分数')

    class Meta():
        db_table = 'course'

    def __str__(self):
        return '学生Id:  课程:  分数: '.format(self.cour_id, self.course, self.grade)


# 学生信息表
class StudentInformationModel(models.Model):
    stu_id = models.CharField(max_length=15,verbose_name='学生id')
    stu_name = models.CharField(max_length=30, verbose_name='学生姓名')
    stu_phone = models.CharField(max_length=20, verbose_name='学生电话')
    str_addr = models.TextField(verbose_name='学生地址')
    stu_faculty = models.CharField(max_length=20, verbose_name='院系')
    stu_major = models.CharField(max_length=30, verbose_name='专业')
    
    class Meta():
        db_table = 'studentinformation'


# 学生登录表
class StudentModel(models.Model):
    stu_id = models.AutoField(primary_key=True)
    username = models.CharField(max_length=10, verbose_name='用户名')
    password = models.CharField(max_length=10, verbose_name='密码')

    class Meta():
        db_table = 'student'
  • verbose_name就是在后台显示对对应的名称
  • class Meta 定义模型的元数据(eg:数据库表名(db_table)
  • def __str__(self):使用__str__方法帮助人性化显示对象信息
  • AutoField(primary_key=True):新建一个主键

拓:

class Meta:
        ordering = ["-c_time"]

定义用户按创建时间的反序排列,也就是最近的最先显示;

name = models.CharField(max_length=128, unique=True)

unique:用户名唯一(若为人名则不用unique:True)

设置数据库后端

settings文件中默认使用SQLite数据库,不需修改(或修改下名字

注册app

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'login',   # 添加models所在的文件夹名
]

创建记录和数据表

pycharm终端输入

python manage.py makemigrations
python manage.py migrate

在admin中注册模型

from django.contrib import admin # 导入admin模块
from login.models import StudentInformationModel, CourseModel, StudentModel # 导入模型模块

# 自定义类:控制后台内容管理页面显示等
class StudentInformationLine(admin.TabularInline):
    model = CourseModel
    extra = 3


class StudentInformationAdmin(admin.ModelAdmin):
    # 显示的字段,先后顺序表示显示顺序
    list_display = ['stu_id', 'stu_name', 'stu_phone', 'str_addr', 'stu_faculty', 'stu_major']
    # 以哪个来过滤
    list_filter = ['stu_id', 'stu_name']
    # 以哪个字段来搜索,admin中就会出现一个搜索栏
    search_fields = ['stu_name', 'str_addr', 'stu_faculty', 'stu_major']
    list_per_page = 5

class CourseAdmin(admin.ModelAdmin):
    list_display = ['cour_id', 'course', 'grade']
    # inlines = [StudentInformationLine, ]  # 谁的外键就写在哪边

class StudentAdmin(admin.ModelAdmin):
    list_display = ['stu_id', 'username', 'password']
    search_fields = ['stu_id', 'username']
    actions_on_top = False
    actions_on_bottom = True

# 注册模型 加以上自定义类为参数
admin.site.register(StudentInformationModel, StudentInformationAdmin)
admin.site.register(CourseModel, CourseAdmin)
admin.site.register(StudentModel, StudentAdmin)

创建超级管理员

终端

python manage.py createsuperuser

用户名、邮箱和密码自行设定

然后可以用admin后台或navicat

路由设计

from django.contrib import admin
from django.urls import path
from django.urls import include
from login import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', views.index),
    path('login/', views.login),
    path('logout/', views.logout),
    path('register/', views.register),
    # path('captcha/', include('captcha.urls')) # 验证码
]

views及html

进入views

from django.shortcuts import render, HttpResponse, redirect, reverse
from .models import StudentModel, StudentInformationModel, CourseModel
from django.forms.models  import model_to_dict
# Create your views here.
import json
# 主界面
def index(request):
    context = {
        'status': '未登录状态'
    }
    # 'msg': True

    return render(request, 'login/index.html', context)

# 登录界面
def login(request):
    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        if not all([username, password]):
            return HttpResponse('错误!用户名或密码为空!')
        else:
            student = StudentModel.objects.filter(username=username, password=password)
            if len(student):
                # 将用户的信息存放到session中,session在中间件中是默认启用的
                # request.session['user_id'] = student[0].stu_id
                request.session['user'] = {
                    'id': student[0].stu_id,
                    'username': username,
                    'password': password
                }

                # 开始了
                id = student[0].stu_id
                # if id == '':
                # id = request.session['user']['id']
                try:
                    stu_data = StudentInformationModel.objects.get(pk=id)
                except:
                    context = {
                        'error': "not found studnet id: " + str(id),
                    }
                    return render(request, 'login/index.html', context)

                stu_course = CourseModel.objects.filter(cour_id=id)
                dct = {}
                for stu in stu_course:
                    dct[stu.course] = stu.grade
                context = {
                    'stu_id': id,
                    'stu_name': stu_data.stu_name,
                    'stu_phone': stu_data.stu_phone,
                    'str_addr': stu_data.str_addr,
                    'stu_faculty': stu_data.stu_faculty,
                    'stu_major': stu_data.stu_major,
                    'course_data': dct,

                    'status': username,
                    'msg': '已登录',
                    'lenght': 1

                }
                return render(request, 'login/index.html', context)

            else:
                context = {
                    'msg': '用户名密码错误'
                }
                return render(request, 'login/login.html', context)
    else:
        context = {
            'status': '未登录状态',
            'length': 0
        }
        return render(request, 'login/login.html', context)
# 注册界面
def register(request):
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        verif_password = request.POST.get("verif_password")
        student = StudentModel.objects.filter(username=username)
        # 注册验证错误信息汇总
        error_message = ""
        if not all([username, password, verif_password]):
            error_message += "注册信息不能为空;\n"
        if student:
            error_message += "该用户名已存在;\n"
        if password != verif_password:
            error_message += "两次密码输入不一致;\n"
        # 如果存在注册信息则重定向到注册页面
        if error_message:
            context = {
                "error": error_message
            }
            return render(request, 'login/register.html', context)

        # 注册信息有效,注册成功
        stu_data = StudentModel()
        stu_data.username = username
        stu_data.password = password
        stu_data.save()
        context = {
            'sucess': '增加成功',
        }
        return render(request, 'login/login.html', context)

    else:
        return render(request, 'login/register.html')
# 退出界面
def logout(request):
    # 注销掉用户,从删除session中保存的信息
    del request.session['user']
    return render(request, 'login/index.html')

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值