本文章也可以是一个独立的实验,所以本文章的目录结构仍是以一个独立的实验进行撰写
本实验所需工具及版本:
Django 2.2.3
Python 3.6.3
Windows 10
VSCode
Navicat Premium 12
1 Django开发环境搭建
以管理员的身份运行
(后文以VSCode代替),单击左上角菜单栏的终端,如所示,在其下拉列表选择【新终端】。
在VSCode的终端输入:
Set-ExecutionPolicy RemoteSigned
再输入E: (E大小写都可以)
E:>mkdir venv #创建一个用于创建虚拟环境的目录,目录名自取
E:>cd venv #进入到该目录
1.1 搭建虚拟环境
E:\venv>pip install virtualenv #安装virtualenv
会显示如下结果:
创建一个名为“tv”的虚拟环境,虚拟环境名可自取
E:\venv>virtualenv tv
查看当前目录
E:\venv>dir
进入到虚拟环境所在的目录下
E:\venv>cd tv
1.2 启动虚拟环境
进入虚拟环境
E:\venv\ tv > Scripts\activate
安装指定的Django的2.2.3版本
(tv) E:\venv\tv>pip install django==2.2.3
1.3 新建项目
创建一个名为test1的项目
(tv) E:\venv\tv>django-admin startproject test1
左上角【文件】→打开文件夹→选择在步骤1.1中创建的E:venv\tv\test1文件夹(项目目录),结果如下:
1.4 创建应用
进入项目目录test1下,即与manage.py文件同级
(tv) E:\venv\tv>cd test1
创建应用,当前项目目录(test1)下新增了一个users的目录,users就是刚创建的应用名
(tv) E:\venv\tv\test1>python manage.py startapp users
users应用创建完成需要提前加入INSTALLED_APPS中,操作如下:
在VSCode中打开test1下的settings.py中的如下处插入红色文字的内容:
可复制如下代码段粘贴至settings.py对应位置中:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'users'
]
插入后按Ctrl+S保存修改内容
2 模板的变量
2.1 创建模板
在与项目主目录同级的目录下创建文件夹”templates”
在templates里创建文件index.html,其内容如下:
可复制如下代码段粘贴至index.html中:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<boby>
<h1>{{hello}}:{{name}}</h1>
</boby>
</html>
2.1.1 在settings.py下配置模板路径
在test1下的settings.py中找到TEMPLATES对应如下紫色底纹内容所在的位置,添加下图中红色方框框选内容:
可复制如下代码段粘贴至settings.py对应位置中:
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',
],
},
},
]
2.2 新建视图
在users/views.py中添加如下图所示内容
可复制如下代码段粘贴至views.py对应位置中:
def index(request):
hello="Hello World"
name="张三"
return render(request,'index.html',{"hello":hello,"name":name})
2.3 配置路由
在项目主目录test1中的url.py中添加如图 2 5所示内容
可复制如下代码段粘贴至url.py对应位置中:
from django.contrib import admin
from django.urls import path
from users.views import index
urlpatterns = [
path('admin/', admin.site.urls),
path('index/',index),
]
2.4 启动项目
python manage.py runserver
在浏览器中访问http://127.0.0.1:8000/index即可显示
3 模板的标签
3.1 创建视图
在users/views.py中添加如下图所示内容(因为有的行内容太长了,内容结果以复制代码为准)
def index1(request):
userlist=[{"name":"张三","age":25,"addtime":"2021-4-6"},{"name":"李四","age":17,"addtime":"2017-5-21"},{"name":"王五","age":23,"addtime":"2016-8-13"}]
return render(request,'index1.html',{"ulist":userlist})
3.2 配置路由
在test1/url.py中添加如下图所示内容
可复制如下代码段粘贴至url.py对应位置中:
from django.contrib import admin
from django.urls import path
from users.views import index
from users.views import index1
urlpatterns = [
path('admin/', admin.site.urls),
path('index/',index),
path('index1/',index1),
]
3.3 创建模板
在templates中创建index1.html,其内容如下图所示
可复制如下代码段粘贴至index1.py对应位置中:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<boby>
<ul>
{% for item in ulist %}
<li>{{item.name}}{{item.age}}{{item.addtime}}</li>
{% endfor %}
</ul>
</boby>
</html>
3.4 启动项目
python manage.py runserver
在浏览器中访问http://127.0.0.1:8000/index1即可显示
3 创建应用
创建应用,当前项目目录(test1)下新增了一个books的目录,books就是刚创建的应用名
(tv) E:\venv\tv\test1>python manage.py startapp books
books应用创建完成需要提前加入INSTALLED_APPS中,操作如下:
在VSCode中打开test1下的settings.py中的如下图处插入红色框选的内容:
可复制如下代码段粘贴至settings.py对应位置中:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'books',
]
插入后按Ctrl+S保存修改内容
4 定义模型
可复制如下代码段粘贴至settings.py对应位置中:
class BookClass(models.Model):
name=models.CharField(max_length=20,verbose_name=u"分类名称")
def __str__(self):
return self.name
class BookInfo(models.Model):
bookclass=models.ForeignKey(BookClass,on_delete=models.CASCADE,verbose_name=u"图书分类",null=True,blank=True)
name=models.CharField(max_length=50,verbose_name=u"图书名称")
price=models.IntegerField(verbose_name=u"价格",default=20)
autor=models.CharField(max_length=20,verbose_name=u"作者")
def __str__(self):
return self.name
5 在数据库中生成表
5.1 生成迁移文件
(tv) E:\venv\tv\test1>python manage.py makemigrations
5.2 执行迁移
相当于执行sql语句创建数据表
(tv) E:\venv\tv\test1>python manage.py migrate
5.3 编辑数据表
(1) 第一种方法:通过后台admin编辑
(2) 第二种通过数据库编辑工具编辑
打开
单击左上角【文件】选项卡→新建连接→SQLite…
执行下图操作
数据库文件位置如下图
可以在下图中看到模型类BookClass与BookInfo迁移后创建的对应的数据表
注意:
BookClass与BookInfo两个数据表的第一个字段”id”,不需要您输入,因为这一字段的数据类型是自增长的整型,即便不指定,也将会自动添加一个主键字段到模型中。数据表内输入内容可以不同,但对应数据类型要相同,例如books_bookinfo的price字段,不一定要写12、60、26等,但是一定要写整型数字,这里写中文就不行
在数据表books_bookclass中对应位置输入如下图所示内容
在数据表books_bookinfo中对应位置输入如下图所示内容
如果本篇文章对您有所帮助,希望您能关注支持我,您的关注支持着我能一直发布Python Web相关实验文章,或许那些文章也对您有所帮助。如果对本片文章有什么问题或补充,欢迎在下方评论留言,我会时常来看的,并对我所能回答的进行回答。谢谢您的支持!
上一章:《Django视图》传送门:
https://blog.csdn.net/weixin_51211535/article/details/116523002
下一章:《admin后台管理系统》传送门》:
https://blog.csdn.net/weixin_51211535/article/details/117666949