0


python+Django学生管理系统


1.创建文件夹

首先要先启动mysql

创建一个新的文件夹用来存放其中内容

2.创建项目

鼠标右击打开终端

在终端中输入

 django-admin startproject aaa

创建一个名为aaa的项目文件

3.进行调试

打开pycharm进行调试

打开pycharm,打开学生管理系统文件

从左上角打开,然后进行编辑配置

添加新的运行配置,选择python

输入runsever,点击确定

4.创建应用app

在项目aaa中进入终端,输入

 python manage.py startapp app

5.创建一个新的数据库 student

6.创建templates文件夹存放html文件

7.在app中的models文件中添加表

以表名创建一个类,类名遵循大驼峰命名法;实例方法表示表中的字段名;

7.1 orm字段类型

  1. 表示文本的字段类型- CharField、TextField——字符串、文本
  2. 数字(整数)- IntegerField——整数 - SmallIntegerField——整数 - BigIntegerField——整数
  3. 数字(小数)- FloatField、DecimalField——小数
  4. 日期与时间- DateField——日期 - TimeField——时间 - DateTimeField——日期时间
  5. 特殊类型- OneToOneField——一对一关联 - ForeignKey——外键关联 - ManyToManyField——多对多关联

max_length指定最大长度

Student是学生系统表

User是后面登录用的表,用来储存用户和密码

8.配置setting文件

导入os模板

找到 INSTALLED_APPS(在34行左右) 添加app应用

在 TEMPLATES中的DIRS中添加

os.path.join(BASE_DIR,'templates')

配置DATABASES 连接数据库:

参数说明:

  1. default——默认的数据库,可配置多个数据,使用名称来区分,也就是说,可以配置多个数据库连接信息的
  2. ENGINE——数据库引擎
  3. NAME——数据库名称
  4. USER——数据库登录用户名
  5. PASSWORD——数据库登录密码
  6. HOST——数据库访问地址
  7. PORT——数据库访问端口

由于这次并没有使用静态所以就没有配置静态资源

9. 将模板储存在app中

首先在app中创建一个url路由文件

路由转发

分配url

10.数据迁移

python manage.py makemigrations
python manage.py migrate

使用这两条命令进行数据迁移,迁移完成后会出现一个migrations中会出现一个新文件可以在文件夹中查看数据是否迁移成功

11.实现登录

11.0 创建中间件middieware

创建login.html登录页面(如果页面运行的时候出现重定向次数过多要在第二个app/login后加/)

11.1 配置setting

写完中间件后要在setting中进行配置,将下面的代码添加到MIDDLEWARE中

'middleware.auth.AuthMiddleware'

11.2设置用户名和密码

在user表中设置用户名和密码

点右下角对勾保存;

11.3在views中设置登录视图

def login(request):
    if request.method == 'GET':
        return render(request, 'login.html')
    else:
        # 获取用户名和密码
        post_username = request.POST.get('username')
        post_password = request.POST.get('password')

        try:
            # 验证用户是否登录成功
            user_model = User.objects.get(username=post_username, password=post_password)
            # 将用户信息存在 session中
            request.session['user'] = post_username  # {}
            print(user_model.username, user_model.password)
            return redirect('/app/student')
        except:
            return HttpResponse('用户名或密码错误')

def logout(request):
    request.session.flush()  # 清除当前登录用户的session数据
    return redirect('/app/login')

11.4 添加登录路由

11.5 创建登录页面html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post">
  {% csrf_token %}
  <div class="item">
    <label for="">用户名:</label>
    <input type="text" name="username">
  </div>
  <div class="item">
    <label for="">密码:</label>
    <input type="password" name="password">
  </div>
  <div class="item">
    <input type="submit" value="登录">
  </div>
</form>
</body>
</html>

在终端中运行manage文件

在浏览器中输入ip和端口号和路由进入登录页面

12 创建学生管理主页面

首先创建一个通用模板

12.1 创建student页面

继承layout.html内容(这里只是为大家简单展示一下继承的用法)

{% extends 'layout.html' %}
{% block main %}
<a href="/app/book_add">增加学生</a>
<table>
    <thead>
        <tr>
            <th>姓名</th>
            <th>年龄</th>
            <th>性别</th>
        </tr>
    </thead>
    <tbody>
        {% for item in ls %}
        <tr>
            <td>{{ item.name }}</td>
            <td>{{ item.age }}</td>
            <td>{{ item.sex }}</td>
        </tr>
        {% endfor %}
    </tbody>
</table>
{% endblock %}

12.2 创建views中student函数

def student(request):
    ls = Student.objects.all()
    return render(request,'student.html',{'ls':ls})

12.3 添加路由

登录完成后就会跳转到student页面

13 添加增加学生功能

13.1 创建添加学生页面

{% extends 'layout.html' %}
{% block main %}
<form method="POST">
    {% csrf_token %}
<p>学生姓名<input type="text" name="name"></p>
<p>学生性别
    <input type="radio" name="sex" value="0">男
    <input type="radio" name="sex" value="1">女
</p>
<p>学生年龄<input type="text" name="age"></p>
<p><button>添加</button></p>
</form>
{% endblock %}

13.2 在view中创建添加函数

def add(request):
    if request.method == 'GET':
        return render(request,'add.html')
    else:
        name = request.POST.get('name')
        sex = request.POST.get('sex')
        age = request.POST.get('age')
        Student.objects.create(name = name,sex=sex,age=age)
    return redirect('/app/student')

13.3添加路由

13.4在student.html中创建添加学生链接

14. 修改功能

14.1创建修改学生页面

{% extends 'layout.html' %}
{% block main %}
<form method="POST">
    {% csrf_token %}
<p>学生姓名<input type="text" name="name"></p>
<p>学生性别
    <input type="radio" name="sex" value="0">男
    <input type="radio" name="sex" value="1">女
</p>
<p>学生年龄<input type="text" name="age"></p>
<p><button>修改</button></p>
</form>
{% endblock %}

14.2 在view中创建添加函数

def update(request):
    id = request.GET.get('id')
    if request.method == 'GET':
        ls = Student.objects.get(id = id)
        return  render(request,'update.html',{
            'ls':ls
        })
    else:
        name = request.POST.get('name')
        age = request.POST.get('age')
        sex = request.POST.get('sex')
        Student.objects.filter(id=id).update(
            name = name,
            age = age,
            sex = sex
        )
        return redirect('/app/student')

14.3添加路由

14.4在student.html中创建修改链接

15. 删除功能

15.1 在view中创建删除函数

def delete(request):
    id = request.GET.get('id')
    Student.objects.filter(id=id).delete()
    return redirect('/app/student')

15.2 添加路由

15.3 在student.html中创建删除链接

16. views.py中的代码

下面是views.py中的所有代码

from django.http import HttpResponse
from django.shortcuts import render, redirect

# Create your views here.
from app.models import Student, User
def student(request):
    ls = Student.objects.all()
    return render(request,'student.html',{'ls':ls})

def add(request):
    if request.method == 'GET':
        return render(request,'add.html')
    else:
        name = request.POST.get('name')
        sex = request.POST.get('sex')
        age = request.POST.get('age')
        Student.objects.create(name = name,sex=sex,age=age)
    return redirect('/app/student')
def delete(request):
    id = request.GET.get('id')
    Student.objects.filter(id=id).delete()
    return redirect('/app/student')
def update(request):
    id = request.GET.get('id')
    if request.method == 'GET':
        ls = Student.objects.get(id = id)
        return  render(request,'update.html',{
            'ls':ls
        })
    else:
        name = request.POST.get('name')
        age = request.POST.get('age')
        sex = request.POST.get('sex')
        Student.objects.filter(id=id).update(
            name = name,
            age = age,
            sex = sex
        )
        return redirect('/app/student')

def login(request):
    if request.method == 'GET':
        return render(request, 'login.html')
    else:
        # 获取用户名和密码
        post_username = request.POST.get('username')
        post_password = request.POST.get('password')

        try:
            # 验证用户是否登录成功
            user_model = User.objects.get(username=post_username, password=post_password)
            # 将用户信息存在 session中
            request.session['user'] = post_username  # {}
            print(user_model.username, user_model.password)
            return redirect('/app/student')
        except:
            return HttpResponse('用户名或密码错误')

def logout(request):
    request.session.flush()  # 清除当前登录用户的session数据
    return redirect('/app/login')

17. student.html中的代码

下面是student.html中的代码

{% extends 'layout.html' %}
{% block main %}
<a href="/app/add">增加学生</a>
<table>
    <thead>
        <tr>
            <th>姓名</th>
            <th>年龄</th>
            <th>性别</th>
            <th>操作</th>
        </tr>
    </thead>
    <tbody>
        {% for item in ls %}
        <tr>
            <td>{{ item.name }}</td>
            <td>{{ item.age }}</td>
            <td>
                {% if item.sex == '1' %}
                    女
                {% else %}
                    男
                {% endif %}
            </td>
            <td><a href="/app/delete?id={{item.id}}">删除</a></td>
            <td><a href="/app/update?id={{item.id}}">修改</a></td>
        </tr>
        {% endfor %}
    </tbody>
</table>
{% endblock %}

总结

提示:以上就是本文是全部内容

标签: django python 后端

本文转载自: https://blog.csdn.net/m0_68845148/article/details/134418385
版权归原作者 程簃 所有, 如有侵权,请联系我们删除。

“python+Django学生管理系统”的评论:

还没有评论