django快速入门(一)--简单学生管理系统--主体流程

2022-07-31,,,,

前言

django 官方文档 https://docs.djangoproject.com/en/3.0/
肯定是官方文档最全最细,这里的流程一个是我自己的练习,适合初学者,当一个流程走下来,可以从整体上去把握官方文档,去查阅更细节的东西。
django快速入门(一)–简单学生管理系统主体流程
django快速入门(二)–站点管理与模型
django快速入门(三)–视图
django快速入门(四)–模板,部署

MVC

大部分开发语言中都有MVC框架,核心思想就是解耦,降低功能之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用。这里的m表示model,主要用于对数据的封装。V表示view,用于向用户展示结果。C表示controller,是核心,用于处理请求,获取数据,返回结果。

MVT

djabgo是一款python的web开发框架,与MVC有所不同,属于MVT框架。m表示model,负责与数据库交互。v表示view,是核心,负责接收请求,获取数据,返回结果。t表示template,负责呈现内容到浏览器。

环境准备

下面所有的运行都是建立在ubuntu18上实验的。
为了解决python的版本问题,可以使用虚拟环境,这样即使安装不同版本的django也不会互相影响。

pip install virtualenv

如果因为网速问题下载失败,可以使用国内豆瓣的源。

pip install -i https://pypi.doubanio.com/simple/ virtualenv

virtualenv的使用

virtualenv venv  #创建名为venv的虚拟环境
source venv/bin/activate #进入虚拟环境
deactivate #退出当前虚拟化境

当虚拟环境比较多时,上述方式不容易集中管理,建议使用virtualenvwrapper.

pip install -i https://pypi.doubanio.com/simple/ virtualenvwrapper

装好后可以使用下面的命令找到安装的脚本,打开脚本按照里面的要求做就行。

sudo find / -name "virtualenvwrapper.sh" 

假如你是使用pip3安装的,可能会遇到以下报错:

[root@ ~]# source ~/.bashrc
/usr/bin/python: No module named virtualenvwrapper
virtualenvwrapper.sh: There was a problem running the initialization hooks.

If Python could not import the module virtualenvwrapper.hook_loader,
check that virtualenvwrapper has been installed for
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is
set properly.

virtualenvwrapper的脚本默认使用的/usr/bin/python,我们需要修改成/usr/bin/python3。
修改步骤,在~/.bashrc文件中,在source /usr/local/bin/virtualenvwrapper.sh前,加入:

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3

也就是关于virtualenvwrapper.sh这段,修改成:

if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
    export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
    export WORKON_HOME=$HOME/.virtualenvs
    source /usr/local/bin/virtualenvwrapper.sh
fi

常用命令:

mkvirtualenv [虚拟环境名称]  #新建虚拟环境
rmvirtualenv [虚拟环境名称]  #删除虚拟环境
workon [虚拟环境名称]   # 进入指定虚拟环境
deactivate  # 退出当前虚拟环境
mkvirtualenv -p /usr/bin/python3 mysite-py3 #指定python版本安装

mysql

sudo apt-get install mysql-server mysql-client

登陆mysql,创建表格

CREATE DATABASE students CHARACTER SET utf8;

推荐一款linux下的可视化工具。
sudo apt-get install mysql-workbench

快速搭建步骤

mkvirtualenv -p /usr/bin/python3 mysite-py3

这里使用python3搭建,workon进入虚拟环境后,

pip intsall django==3.0

同时django还需要mysqlclient 1.3.13及以上

pip install mysqlclient

安装好后可查看django的版本。python -m django --version
新建一个名为mysite的文件夹后进入运行

django-admin startproject mysite
python manage.py startapp students

第一个是创建项目,第二个是创建应用,一个项目可以拥有多个应用。运行完第一个命令后有以下目录结构
这里的mysite就是项目了,进入项目的mysite后运行第二个名命令,有以下目录结构
这里的syudents就是应用。

修改配置文件

修改配置文件setting.py

INSTALLED_APPS = (
    'django.contrib.admin', # 管理员站点
    'django.contrib.auth', # 认证授权系统
    'django.contrib.contenttypes', # 内容类型框架
    'django.contrib.sessions', # 会话框架
    'django.contrib.messages', # 消息框架
    'django.contrib.staticfiles', # 
    'students' # 此处注册创建的应用
)
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',
            ],
        },
    },
]

##mysql作为数据库后端
# settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': '/path/to/my.cnf',
        },
    }
}

from django.utils.translation import gettext_lazy as _
LANGUAGES = [
    ('zh-Hans', _('Chinese')),
]

LANGUAGE_CODE = 'zh-Hans'  
TIME_ZONE = 'Asia/Shanghai' #时区


# /etc/mysql/my.cnf  &&&&&&注意这里不是写在setting.py文件内,而是写在mysql的配置文件内
[client]
database = students
user = USER
password = PASSWORD
default-character-set = utf8

创建模型

在students/models.py写入下面内容

class ClassStudents(models.Model):
    name = models.CharField(max_length=10, null=False, blank=False)
    stu_number = models.PositiveIntegerField(null=False, blank=False)
    gender = models.BooleanField(default=True)
    isDelete = models.BooleanField(default=False)
    content = models.CharField(max_length=100, null=True, blank=False)

    def __str__(self):
        return self.name

数据库迁移:

python manage.py makemigrations
python manage.py migrate

模型就是对应着数据库,从上面内容可以看到创建了一张表,表的内容有姓名,学号,性别,软删除,内容 5个字段,运行python manage.py makemigrations 以数据库语言生成缓存,python manage.py migrate则是在mysql创建表格。

创建视图

视图就是用来处理用户的请求,并返回内容。
在mysite/urls.py 写入以下内容

from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('students', include('students.urls', namespace='students')),
]

在students文件夹下新建urls.py文件,写入

from django.urls import path
from . import views

app_name = 'students'
urlpatterns = [
    path('', views.index, name='index')
    path(r'post', views.post_info, name='post_info'),
    path(r'post_result', views.receive_info, name='post_info_true')
]

上面就是请求的过程的url处理,一般而言,在项目的mysite的url中写入应用的命名空间,在应用students中新建url文件写入真正的正则表达式匹配内容,这是因为一个项目可以有多个应用,当应用多的时候,这样做各个应用的url不会耦合,不推荐全都写在项目的url中。

在students/views.py文件,写入

from django.shortcuts import render


# Create your views here.

def index(request):
    return render(request, 'students/index.html')

def post_info(request):
    return render(request, 'students/post_info.html')


def receive_info(request):
    uname = request.POST['uname']
    upwd = request.POST['upwd']
    post_content = request.POST['post_content']
    q = ClassStudents.objects.filter(name=uname)
    if q.count() != 1:
        page_show = "数据库没有查询到信息"
    else:
        students = q.first()
        stu_number = str(students.stu_number)
        if stu_number[-4:] == upwd:
            students.content = post_content
            students.save()
            page_show = "提交成功!"
        else:
            page_show = "你填写的学号后四位与记录不符合,请确认是否填写错误,或者与相关负责人联系!"
    context = {'page_show': page_show}
    return render(request, 'students/post_info_result.html', context)

上面的views.py 则是返回用户请求的内容,一般搭配模板使用。

创建模板

在与mysite文件夹同级下建立上述文件夹及文件。
模板就是用来展现在浏览器的内容,和上面的原因一样,推建新建template文件夹,在各个应用中放入模板,这样当应用很多时,.html文件重名也没有关系。
在templates/students/中放入文件
post_info.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>
<form method="post" action="{% url 'students:post_info_true'%}">
    {% csrf_token %}
    姓名:<input type="text" name="uname"/><br>
    学号后4位:<input type="password" name="upwd"/><br>
    提交的内容:<input type="text" name="post_content"/><br>
    <input type="submit" value="提交"/>
</form>
</body>
</html>

post_info_result.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{{ page_show }}<br>
</body>
</html>
 python manage.py runserver

运行上述命令试运行,可以正常访问http://127.0.0.1:8000/students页面的话就快速搭建成功了。

本文地址:https://blog.csdn.net/qq_22808061/article/details/104883170

《django快速入门(一)--简单学生管理系统--主体流程.doc》

下载本文的Word格式文档,以方便收藏与打印。