本文章也可以是一个独立的实验,所以本文章的目录结构仍是以一个独立的实验进行撰写
本实验所需工具及版本:
Django 2.2.3
Python 3.6.3
Windows 10
VSCode
1 Django开发环境搭建
(1)打开CMD
(2)输入E: #切换到E盘(E大小写都可以,没有E盘别的盘也可以)
(3)E:>mkdir venv #创建一个用于创建虚拟环境的目录,目录名自取
(4)E:>cd venv #进入到该目录
1.1 搭建虚拟环境
安装命令:
E:\venv> pip install virtualenv
安装virtualenv,会显示如下结果:
创建一个名为“testpro_venv”的虚拟环境,虚拟环境名可自取,命令如下:
E:\venv> virtualenv testpro_venv
查看当前目录:
E:\venv>dir
进入到虚拟环境所在的目录下:
E:\venv>cd testpro_venv
2 启动虚拟环境
进入虚拟环境:
E:\venv\ testpro_venv > Scripts\activate
安装指定的Django的2.2.3版本:
(testpro_venv) E:\venv\testpro_venv>pip install django==2.2.3
3 新建项目
创建一个名为test1的项目
(tv) E:\venv\tv>django-admin startproject test1
以管理员的身份运行VSCode,左上角【文件】→打开文件夹→选择在1.1中创建的E:venv\testpro_venv\mydjango文件夹(项目目录),结果如下:
在VSCode的终端输入:
PS E:\venv\tv\test1> Set-ExecutionPolicy
PS E:\venv\tv\test1> RemoteSigned
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保存修改内容
5 创建模板
在与项目主目录同级的目录下创建文件夹”templates”
在templates里创建文件login.html,其内容如下:
可复制如下代码段粘贴至login.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>玩家登录</title>
</head>
<boby>
<form action="/login/" method="post">
昵称:<input name="name" />
<br/> 密码:<input name="pwd" />
<br/>
<input type="submit" value="登入" />
</form>
</boby>
</html>
5.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',
],
},
},
]
6 注释中间件
在test1下的settings.py中找到MIDDLEWARE对应位置的中间件代码,将光标放置在那行代码的中间,按Ctrl+?(也就是Ctrl+/,是同一个键)注释:
注释掉防止第三方访问中间件的代码,以免login.html获取用户名与密码报错(真实环境不会注释掉这个中间件,这时仅用于实验而注释掉)
7 定义视图
在users下的views.py中添加如下代码:
from django.http import HttpResponse
def index(request):
return render(request,"login.html")
def login(request):
if request.method=="GET":
a=request.GET.get('name')
b=request.GET['pwd']
context={'name':a,'pwd':b}
print(str(context))
return HttpResponse("拒绝访问")
else:
a=request.POST.get('name')
b=request.POST['pwd']
context={'name':a,'pwd':b}
print(str(context))
return render(request,'login.html')
结果如下图所示:
8 配置路由
在test1下的urls.py中添加如中红色方框框选内容:
可复制如下代码段粘贴至urls.py对应位置中:
from django.contrib import admin
from django.urls import path,re_path
from users.views import index
from users.views import login
urlpatterns = [
path('admin/', admin.site.urls),
path('index/',index),
path('login/',login),
]
9 启动项目
在VSCode的终端输入:
PS E:\venv\tv\test1> python manage.py runserver
在浏览器中访问http://127.0.0.1/index即可显示登陆界面,如下图所示:
输入昵称和密码后单击登入
然后按Alt+Tab切换到VSCode:
由上图红框框选部分可见,后台接收到了客户在网页端输入的昵称和密码
9.1 欢迎界面
为了更接近现实场景,希望在单击“登入”按钮后,不是只能在后台(VSCode里的终端)看到效果,而是在网页上即时显示登陆成功的信息。为实现这个想法,需要再完成以下步骤:
在templates目录下创建welcome.html欢迎界面,文件路径如下图所示:
welcome.html代码如下:
<!DOCTYPE html>
<html lang="en">
<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>登陆成功</title>
</head>
<boby>
<h1>用户登录成功</h1>
<h2>您好!欢迎您,{{name}}</h2>
</boby>
</html>
在views.py中修改如下两个地方:
(1) 此处是为了在登录界面(login)按下了“登入”按钮后,可以直接跳转到欢迎界面(welcome),修改后按下“登入”键,则不会再停留在登录界面了,也不会只能在后台看登录信息了。
(2) 这里对应welcome.html中新添加的{{name}},views.py中的a是对应用户登录时输入的用户名,这里将a的值传递给了welcome.html中的name,这样每个用户在登录后看到的欢迎界面内容中就是一定是该用户自己的用户名了。
10 默认管理器对象objects
Django使用一种直观的方式把数据库表中的数据表示成Python对象,即一个模型类代表数据库中的一个表,一个模型类的实例代表数据库表中的一条特定的记录。下面将在视图下进行调用管理器对象的操作,并针对常用的模型查询方法进行扩展。
10.1 首先创建book应用
(tv) E:\venv\tv\test1>python manage.py startapp book #参照前面的“创建应用”章节
Book/models.py中要添加的代码如下:
class BookInfo(models.Model):
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
10.2 生成迁移文件
(tv) E:\venv\tv\test1>python manage.py makemigrations book
10.3 执行迁移
(tv) E:\venv\tv\test1>python manage.py migrate
至此,数据表生成成功
在book/views.py中开始对模型进行插入、删除、修改、查询操作
book/views.py中要添加的代码如下:
from django.http import HttpResponse
from .models import BookInfo
#插入图书信息
def addbooks(request):
obj=BookInfo(name="Python 轻松学",autor="张三",price=59)
result=obj.save(obj)
return HttpResponse("添加成功")
#删除图书信息
def delbooks(request):
books=BookInfo.objects.filter(name="Python 轻松学 1").first()
if not books:
return HttpResponse("未找到数据")
else:
books.delete()
return HttpResponse("删除成功")
#修改图书信息
def updatebooks(request):
books=BookInfo.objects.filter(name="Python 轻松学").first()
if not books:
return HttpResponse("未找到数据")
else:
books.name="Python 轻松学 1"
books.save()
return HttpResponse("更新成功")
#查询图书信息
def getbooks(request):
books=BookInfo.objects.all()
return HttpResponse(books)
在test1/url.py中添加相应代码:
可将下列代码,复制到test1/url.py中:
from book.views import *
path('add/',addbooks),
path('del/',delbooks),
path('update/',updatebooks),
path('all/',getbooks),
在VSCode的终端输入:
PS E:\venv\tv\test1> python manage.py runserver #启动项目
在浏览器中输入对应地址如下图(其余操作类似下图 )
11 自定义错误页面
在templates目录下创建404.html文件
404.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>自定义404页面</h1>
<p>{{content}}</p>
</boby>
</html>
在settings.py下配置模板路径(如果您是本文章开头一直按顺序做的话,这一步已经在本文章“5.1 在settings.py下配置模板路径”中完成了,若不是,本步骤请参照步骤5.1完成)
在users/views.py中在原来的基础上添加404错误的处理函数
在users/views.py中要添加的代码如下:
def page_not_found(request,exception):
return render(request,'404.html',{"content":"this is 404 error"})
在test1/url.py中进行配置,将404错误的处理函数修改为新增的视图函数
在test1/url.py中要添加的代码如下:
handler404=views.page_not_found
如果您希望错误页面当中错误原因等信息不显示出来,可以在test1/setting.py中如下图所示位置进行修改
上述配置完成后,在VSCode的终端输入:
PS E:\venv\tv\test1> python manage.py runserver #启动项目
在浏览器中访问一个不存在的地址,这时显示的就是您自定义的404错误页面,效果如下图所示
如果本篇文章对您有所帮助,希望您能关注支持我,您的关注支持着我能一直发布Python Web相关实验文章,或许那些文章也对您有所帮助。如果对本片文章有什么问题或补充,欢迎在下方评论留言,我会时常来看的,并对我所能回答的进行回答。谢谢您的支持!
上一章:《Django模型与数据库》传送门:
https://blog.csdn.net/weixin_51211535/article/details/116355051
下一章:《Django模板》
https://blog.csdn.net/weixin_51211535/article/details/117198516