实验12基于Django框架Web开发之数据库操作.docx
《实验12基于Django框架Web开发之数据库操作.docx》由会员分享,可在线阅读,更多相关《实验12基于Django框架Web开发之数据库操作.docx(12页珍藏版)》请在冰点文库上搜索。
实验12基于Django框架Web开发之数据库操作
web开发实验2
【实验名称】
Web开发实验2
【实验目的】
学会使用重量级(high-level)python框架Django来完成pythonweb开发.
【实验要求】
要求本实验结束时,学生能熟悉操作模版、连接mysql数据库以及使用API进行数据库的增加、删除、修改等操作。
【知识准备】
1.Python的开发环境
2.Python的基础知识
【实验设备】
安装好PyCharm工具
【实验步骤】
1.实验准备
1.1操作模板
在基础实验中我们使用django.http.HttpResponse()来输出"HelloWorld!
"。
该方式将数据与视图混合在一起,不符合Django的MVC思想.
这里详细介绍Django模板的应用,模板是一个文本,用于分离文档的表现形式和内容.
先在基础实验中创建的app模块中,创建两层目录,分别名为”templates”和模块名.然后在最底层目录创建一个’index.html’文件.
1.1.1创建index.html文件
1.1.2修改模板地址
在index.html文件中输入需要展示的内容,这里就简单用’
{{hello}}
’来作一个例子.
其中双大括号里的就是模板中的变量.
接下来需要向Django说明模板文件的路径修改TEMPLATES中的DIRS为[BASE_DIR+'/testModel/templates/testModel',],如下所示:
1.1.3修改testModelview.py
使用render来替代之前使用的HttpResponse
fromdjango.shortcutsimportrender
defindex(request):
context={}
context['hello']="Helloworld.You’reatthetestModelindex."
returnrender(request,'index.html',context)
1.1.4重新启动,访问输入http:
//127.0.0.1:
8000/sayHello/
可以看到,这里使用render来替代之前使用的HttpResponse。
render还使用了一个字典context作为参数。
context字典中元素的键值"hello"对应了模板中的变量"{{hello}}"。
然后我们可以更新页面,也可以重新启动项目,输入相应的路径就可以看到效果:
1.1.5if/else标签
在上一节的view,template环境下,这里就简单学习一下一些模板简单标签.
*if/else标签
首先在views.py文件修改一下,在context字典变量中添加一个”ifTab”元素.
然后在index.html模板里添加if/else的标签.
重启访问
其中”{%if%}”标签后一定要跟着”{%endif%}”标签,其中的”{%else%}”和”{%elif%}”标签都是可选的.
*for标签
这是处理循环的标签.
与Python的for语句的情形类似,循环语法是forXinY,Y是要迭代的序列而X是在每一个特定的循环中使用的变量名称。
每一次循环中,模板系统会渲染在{%for%}和{%endfor%}之间的所有内容。
过程和if标签一样,修改view和template一些内容,就可以刷新页面看到效果,很方便.
1.1.6for标签
Views.py上添加了list1的迭代对象,并将之赋予context字典中的一项.
在index.html模板中添加for标签,并在里面获取”aths”这个有view传过来的迭代变量.
刷新页面,如下.效果出来了!
1.1.7过滤器标签
模板过滤器可以在变量被显示前修改它,过滤器使用管道字符.格式如下:
{{name|lower}}
{{name}}变量被过滤器lower处理后,文档大写转换文本为小写。
过滤管道可以被*套接*,既是说,一个过滤器管道的输出又可以作为下一个管道的输入.例子如下:
在view文件中添加一个字符串,并将其添加到context字典一项中.
在index.html模板中,添加从view获取到的upper_str字符串,然后通过过滤符来帮它小写化并只提取第一个字符.然后效果如下:
1.2连接mysql数据库
1.2.1增加mysql依赖包
增加mysql依赖包PyMySQL,如果没有则需要增加依赖包
1.2.2设置testModel_init_.py文件
初始化启动pymysql
importpymysql
pymysql.install_as_MySQLdb()
1.2.3设置djangosettings.py
'ENGINE':
'django.db.backends.mysql',
'NAME':
'django1',
'USER':
'root',
'PASSWORD':
'root',
'HOST':
'127.0.0.1',
'PORT':
'3306',
1.3模块操作
1.3.1修改testModel中的models.py
fromdjango.dbimportmodels
#Createyourmodelshere.
classQuestion(models.Model):
question_text=models.CharField(max_length=200)
pub_date=models.DateTimeField("datapublished")
classChoise(models.Model):
question=models.ForeignKey(Question,on_delete=models.CASCADE)
choice_text=models.CharField(max_length=200)
vote=models.IntegerField(default=0)
可以看到Question模型有两个域(field),一个是问题内容(question_text),一个是发布日期(pub_date),这两个域就是相对于问题表的两个字段.而且在可以在代码定义他们的类型(CharField和DateTimeField,除了这两个还有其他域).后面的参数可以定义字段的相关属性,例如默认值(default)和长度(max_length).
而Choice模型有三个域,一个是选择的内容(choice_text)和投票的票数(votes).还一个域是表示有一个外建,关联到Question模型.
1.3.2设置djangosettings.py下的INSTALLED_APPS增加模板地址
模型的代码能给django很多信息,主要是,django通过模型能:
*为app模型创建数据库模型(如CREATETABLE等语句).
*创建python连接数据库API,来连接Question和Choice对象.
首先,为左让项目引入app模块,需要在项目的setting.py的INSTALLED_APPS属性里加入相关class.如下图:
'testModel.apps.TestmodelConfig',
1.3.3执行makemigrations初始化文件
pythonmanage.pymakemigrationstestModel
1.3.4执行sqlmigrate获取创建数据库表的相关信息
pythonmanage.pysqlmigratetestModel0001
1.3.5执行migrate命令来创建这些模型表到数据库
pythonmanage.pymigrate
1.4使用API操作数据库
1.4.1进入manage.py脚本
可以进入交互式python终端来使用django提供的API来操作数据库.
进入djange项目中的交换控制台需要执行命令:
”$pythonmanage.pyshell”
manage.pyshell
1.4.2引入models
fromtestModel.modelsimportQuestion,Choise
查询表所有数据
Question.objects.all()
新增记录