django快速入门(一)--简单学生管理系统--主体流程
前言
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