Pycharm创建python+Django,学生信息管理系统web版本

使用Pycharm创建python+Django,学生信息管理系统web版本

第一步,
创建项目 模块开发在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
一个命令行工具,用来和Django项目进行交互,如前面创建项目就用到了该文件。

"""
Django settings for TestDjango2 project.

Generated by 'django-admin startproject' using Django 3.1.7.

For more information on this file, see
https://docs.djangoproject.com/en/3.1/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.1/ref/settings/
"""

from pathlib import Path
import os
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
#安全密钥
SECRET_KEY = 'hdixe=$#4p8gwyt-a$mj$+rzl@0-$o!0=jxy^^f5h_o&_-l2^7'

# SECURITY WARNING: don't run with debug turned on in production!
#是否开启Debug
DEBUG = True
# 允许访问的主机ip,可以用通配符*
ALLOWED_HOSTS = []


# Application definition
# 用来注册App 前6个是django自带的应用
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'student.apps.StudentConfig',
]
# 中间件 ,需要加载的中间件。比如在请求前和响应后根据规则去执行某些代码的方法
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',
]
# 指定URL列表文件 父级URL配置
ROOT_URLCONF = 'TestDjango2.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的配置文件路径
WSGI_APPLICATION = 'TestDjango2.wsgi.application'


# Database
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases
# 数据库配置 默认的数据库为sqlite
DATABASES = {
    'default': {
        #将之改为mysql数据库,然后重新运行此项目,报错MySQLdb信息的话,去__init__.py修改配置信息,再重新运行即可。
        'ENGINE': 'django.db.backends.mysql',
        # 'NAME': BASE_DIR / 'db.sqlite3',
        'NAME':'test',
        'USER':'root',
        'PASSWORD':'123456',
        'HOST':'127.0.0.1',
        'PORT': '3306'
    }
}


# Password validation
# https://docs.djangoproject.com/en/3.1/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/3.1/topics/i18n/
# 语言设置 默认英语, 中文是zh-hans
LANGUAGE_CODE = 'en-us'
# 时区设置,中国的是:Asia/Shanghai
TIME_ZONE = 'UTC'
# i18n字符集是否支持
USE_I18N = True

USE_L10N = True

# 是否使用timezone
# 保证存储到数据库中的是 UTC 时间;
# 在函数之间传递时间参数时,确保时间已经转换成 UTC 时间
USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.1/howto/static-files/
# 静态文件路径
STATIC_URL = '/static/'

在这里插入图片描述
在这里插入图片描述

admin:对应应用后台管理配置文件

apps:对应应用的配置文件

models:数据模块,用于设计数据库等

tests:编写测试脚本

views:视图层,直接和浏览器进行交互

每次新建一个App我们需要将其在settings.py文件中的INSTALLED_APPS里进行注册,这样程序才能够找到这个服务
在这里插入图片描述

# 本文件在项目启动时会重新加载编译一次,在本项目导入pymsql之后,在这个文件里导入pymysql
import pymysql
#  将pymysql作为MySQLdb
pymysql.install_as_MySQLdb()

在这里插入图片描述
在下面Terminal控制台 输入命令 python manage.py inspectdb > student/models.py 将数据库表生成实体类,上次的代码放在student/models.py
把数据库里面的表自动生成实体类在这里插入图片描述

# This is an auto-generated Django model module.
# You'll have to do the following manually to clean this up:
#   * Rearrange models' order
#   * Make sure each model has one field with primary_key=True
#   * Make sure each ForeignKey and OneToOneField has `on_delete` set to the desired behavior
#   * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
# Feel free to rename the models, but don't rename db_table values or field names.
from django.db import models

# 在下面Terminal控制台 输入命令 python manage.py inspectdb > student/models.py 将数据库表生成实体类,上次的代码放在student/models.py
class Student(models.Model):
    sid = models.AutoField(primary_key=True)
    sname = models.CharField(max_length=255, blank=True, null=True)
    ssex = models.CharField(max_length=255, blank=True, null=True)
    sage = models.IntegerField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'student'
 

视图层
打开TestDjango目录下的view.py,
在这里插入图片描述

from django.db.models import Q
from django.shortcuts import render

from student.models import Student
from django.shortcuts import redirect

# Create your views here.
def index(request):
    # return HttpResponse("Hello World")
    #测试 返回页面,并携带数据
    #     name ="老大"
    #模拟对象集合
    # students=[
    #     {"sid":6,"sname":"关晓彤","ssex":"女","sage":23},
    #     {"sid":3,"sname":"张三","ssex":"女","sage":23},
    #     {"sid":4,"sname":"李四","ssex":"女","sage":23}
    # ]

    #查询数据库
    students=Student.objects.all()
    count=students.__len__()
    # 返回网页地址并携带学生数据
    return render(request,"index.html",context={"students":students,"count":count})

# 根据首页输入框模糊查询
def findStudent(request):
    # 获取搜索框的值
    str = request.POST.get("str")
    # 模糊查询(根据姓名或者性别或者年级查询)
    #如果是不区分大小写, icontains不区分大小写   contains 区分大小写
    students = Student.objects.filter(Q(sname__icontains=str)|Q(ssex__icontains=str))
    # 获取数据的总条数
    count = students.__len__()
    return render(request, "index.html", context={"students": students, "count": count})


# 添加学生
def addStudent(request):
    if request.method=='POST':
        #如果是提交的方式是post 添加数据
        #就是在添加页面add.html 点击提交数据,添加到数据库
        sname=request.POST.get("sname")
        ssex = request.POST.get("ssex")
        sage = request.POST.get("sage")
        #Django提供的方法,只有删除要想查询是否有数据才可以删,就是先Student.objects.get 方法然后 .delete方法
        Student.objects.create(sname=sname,ssex=ssex,sage=sage)
        #  重定向 index.html
        return redirect("index.html")
        # return render(request,"index.html")#Z转发
    else:
        #t 转发 跳转页面add.html
        #如果提交的方式是get 就是在首页点击添加
        return render(request,"add.html")

# 修改学生
def updateStudent(request):
    # 根据表单提交的方式判断是在index.html点击修改操作还是在update.html修改之后提交数据库
    if request.method == "GET":
        #如果提交方式是get 点击某对象的操作里的修改
        # 获取 点击修改 传过来的id
        sid = request.GET['update_sid']
        #  根据 sid 查询单个对象的所有信息
        student = Student.objects.get(sid=sid)
        # 跳转到修改页面,并携带修改对象的信息
        return render(request, "update.html", context={"student": student})
    else:
        # 如果提交方式是POST  表单提交,进行信息修改
        # 获取需要修改的学生对象的信息
        update_sid=request.POST.get("sid")
        update_student = Student.objects.get(sid=update_sid)
        update_sname=request.POST.get("sname")
        update_ssex=request.POST.get("ssex")
        update_sage=request.POST.get("sage")
        # 修改对象的信息
        update_student.sname=update_sname
        update_student.ssex=update_ssex
        update_student.sage=update_sage
        # 保存对象到数据库
        update_student.save()
        # 重定向到首页,显示学生信息
        return redirect("index.html")

# 删除学生
def deleteStudent(request):
    # 获取要删除的sid
    delete_sid=request.GET['delete_sid']
    # 先查找单个对象,然后进行删除
    Student.objects.get(sid=delete_sid).delete()
    # 删除之后,重定向到首页
    return redirect("index.html")

声明请求url的映射
urls.py
在这里插入图片描述
在这里插入图片描述
index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<script>
    {#    确认删除框#}
    function del(stu_sid) {
        var i = confirm("确认删除吗?")
        if (i == true) {
            location.href = "deleteStudent?delete_sid=" + stu_sid;
        }
    }
</script>
<body>
    <h1>学生信息管理系统<font size="2">©CSDN-ID:yaoyulan21</font></h1>
    {#你好!{{ name }}#}
    <br/>
    <form action="findStudent" method="post">
        {#表单提交都要添加防御机制#}
        {% csrf_token %}
        <input type="text" name="str" placeholder="此处填写姓名或性别"><input type="submit" value="搜索">&emsp;&emsp;&emsp;
        <a href="add.html">添加</a>
    </form>
     <br/>
    <table border="1">
        <thead>
            <th>编号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
            <th>操作</th>
        </thead>
        <tbody>
            {#将views.py返回的学生集合数据context中的键students通过for循环遍历#}
            {% for student in students %}
                <tr>
                    <td>{{ student.sid }}</td>
                    <td>{{ student.sname }}</td>
                    {% if student.ssex == '1'%}
                        <td></td>
                    {% else %}
                       <td></td>
                    {% endif %}
                    <td>{{ student.sage }}</td>
                    <td>
                        <a href="updateStudent?update_sid={{ student.sid }}">修改</a>|
                        <a  href="javascript:del({{ student.sid }})">删除</a>
                    </td>
                </tr>
            {% endfor %}
        </tbody>
    </table>
    <div style="margin-right:15px">{{ count }}条记录</div>
</body>
</html>

update.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>修改页面</title>
</head>
<body>
<div align="center">
    <h3>修改学生</h3>
    <form action="updateStudent" method="post">
        {#在 templete 中, 为每个 POST form 增加一个 {% csrf_token %} tag,这是Django的防御机制#}
        {% csrf_token %}
        <input type="hidden" value="{{ student.sid }}" name="sid">
        姓名:<input type="text" value="{{ student.sname }}" name="sname"><br>
        性别:
{#        <input type="text" value="{{ student.ssex }}" name="ssex">#}
        {% if student.ssex == '1' %}<input type="radio" name="ssex"  checked="checked" value="1"/><input type="radio" name="ssex" value="0"/>
                {% else%}<input type="radio" name="ssex"  value="1"/><input type="radio" name="ssex" checked="checked" value="0"/>
            {% endif %}
        <br>
        年龄:<input type="text" value="{{ student.sage }}" name="sage"><br>
        <input type="submit" value="修改">
    </form>
</div>
</body>
</html>

add.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加页面</title>
</head>
<body>
    <h1>添加学生</h1>
    {#<form action="add.html?sid={{ stid }}" method="post">#}
    <form action="add.html" method="post">
        {#在 templete 中, 为每个 POST form 增加一个 {% csrf_token %} tag,这是Django的防御机制#}
        {% csrf_token %}
        姓名:<input type="text" name="sname"/><br/>
        性别:男<input type="radio" name="ssex" value="1" checked="checked"/><input type="radio" name="ssex" value="0"/><br/>
{#        <input type="text" name="ssex"/>#}
{#        男<input type="radio" name="gender" value="1"/>女<input type="radio" name="gender" value="0"/>#}
        年龄:<input type="number" name="sage"/><br/>
        <input type="submit" value=" 添加 "/><br/>
    </form>
</body>
</html>

在这里插入图片描述

在这里插入图片描述
数据库
在这里插入图片描述

/*
 Navicat MySQL Data Transfer

 Source Server         : 127.0.0.1
 Source Server Type    : MySQL
 Source Server Version : 50559
 Source Host           : localhost:3306
 Source Schema         : test

 Target Server Type    : MySQL
 Target Server Version : 50559
 File Encoding         : 65001

 Date: 28/02/2021 14:48:42
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `sid` int(11) NOT NULL AUTO_INCREMENT,
  `sname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `ssex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `sage` int(255) NULL DEFAULT NULL,
  PRIMARY KEY (`sid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 17 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

SET FOREIGN_KEY_CHECKS = 1;

练手demo,不对的地方请大家多多指正,谢谢
链接:https://pan.baidu.com/s/1GmytR6qV_EQPHexPRZg95A
提取码:7jzy
复制这段内容后打开百度网盘手机App,操作更方便哦

  • 19
    点赞
  • 155
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Python是一种高级编程语言,它具有简单易学、功能强大和可扩展性等特点。Django是一个PythonWeb框架,它提供了许多工具和库,帮助我们更快速地开发Web应用程序。PyCharm是一种Python开发环境,它提供了丰富的功能,帮助我们更有效地编写、调试和管理Python代码。MySQL是一种流行的关系型数据库管理系统,它可以与PythonDjango结合使用,用于存储和管理数据。 PythonDjango的结合可以帮助我们快速、高效地开发Web应用程序。Django提供了许多功能强大且易于使用的模块和工具,包括URL路由、模板引擎、表单处理、用户认证等。使用Django,我们可以快速地建立数据库模型、处理用户请求和生成网页模板等。 PyCharm作为一个Python开发环境,提供了很多方便的功能。例如,它可以自动补全代码、提供调试器和错误检查工具,还可以集成版本控制系统等。使用PyCharm,我们可以更高效地编写、调试和管理Python代码。 MySQL是一个功能强大的关系型数据库系统。它可以与PythonDjango结合使用,用于存储和管理数据。我们可以使用PythonMySQL驱动程序连接到MySQL数据库,并执行诸如插入、更新和查询等操作。在Django中,我们可以使用它的ORM(对象关系映射)功能,通过类和对象的方式来操作数据库,这样可以更方便地进行数据库操作。 总的来说,PythonDjangoPyCharmMySQL是一组强大的工具,它们的结合可以极大地提高我们开发Web应用程序的效率和质量。无论是初学者还是有经验的开发者,都可以借助这些工具来快速构建功能完善、易于维护的Web应用程序。 ### 回答2: Python是一种高级编程语言,广泛用于Web开发、数据处理、人工智能等领域。它的语法简洁、易于学习,因此备受开发者的喜爱。 Django是一个基于PythonWeb框架,它提供了许多开发Web应用所需的功能和工具,如URL路由、模板引擎、表单处理等。使用Django可以快速搭建稳定、安全且易于维护的Web应用。 PyCharm是一款强大的Python集成开发环境(IDE),它提供了许多便捷的功能,如代码自动补全、调试器、版本控制工具等。使用PyCharm可以提高开发效率,减少错误。 MySQL是一种流行的关系型数据库管理系统。它使用结构化查询语言(SQL)作为操作语言,可以存储和管理大量结构化数据。Python通过各种数据库接口可以与MySQL进行连接,方便地进行数据读写操作。 结合PythonDjangoPyCharmMySQL,我们可以快速开发高效的Web应用。首先,使用PyCharm创建Django项目,然后在项目中编写Python代码和Django的相关配置,实现业务逻辑、URL路由等功能。通过Django的模板引擎,我们可以方便地渲染动态页面。同时,通过MySQL存储数据,我们可以使用Django提供的ORM工具进行数据库操作,使数据的读写更加简洁和安全。 总的来说,PythonDjangoPyCharmMySQL是一组强大的工具和技术,它们的结合可以帮助开发者快速构建高效、安全的Web应用,并进行灵活的数据操作。 ### 回答3: Python是一种高级编程语言,它具有简单易学、功能强大和灵活的特点。它被广泛应用于Web开发、数据分析、人工智能等领域。而Django是一个基于Python的开源Web框架,它提供了一套完整的开发工具和规范,可以帮助开发者快速搭建高效、稳定的Web应用。 PyCharm是一种Python开发环境,它提供了丰富的代码编辑、调试和自动完成等功能,使开发过程更加便捷和高效。它可以与Django框架完美集成,提供强大的开发支持。 MySQL是一种流行的关系型数据库管理系统,它可以存储和管理大量的结构化数据,如用户信息、商品数据等。Python可以通过MySQL的数据库驱动程序进行与数据库的交互操作。使用PythonMySQL可以实现数据的读取、插入、更新和删除等操作,为Web应用提供持久化的数据存储。 在使用Python开发Django应用时,可以借助PyCharm进行代码编辑和调试,并利用MySQL作为后台数据库进行数据存储和管理。PyCharm提供了强大的代码自动完成、语法检查和调试功能,可以大大提升开发效率和代码质量。同时,使用MySQL作为数据库可以保证数据的稳定性和安全性,满足对数据管理的需求。 总之,PythonDjangoPyCharmMySQL是一套非常强大的开发工具组合,可以帮助开发者高效、稳定地实现Web应用的开发和数据管理。通过它们的结合使用,可以快速搭建出高质量的Web应用,并实现与数据库的数据交互操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值