一、数据库的简单交互
首先你需要安装有自己的mysql数据库,此文不做介绍
另外,你需要预设一个空数据库test用于之后的操作
当然,你需要在虚拟环境中安装pymysql
pip install pymysql
在mysql数据库中创建一个空数据库test
1、设置数据库
在setting.py中找到DATABASES字典
配置为
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',#数据库类型
'NAME': 'test',#数据库名字
'USER':'root',#自己数据库用户名
'PASSWORD':'123',#自己的数据库的密码
'PORT':'3306'#mysql数据库端口,一般为3306,如果不是请修改
}
}
2、添加驱动
在命令行输入pip install pymysql
安装python的pymysql库
即导入python使用mysql数据库的包pymysql
在项目中找到__init__.py文件
写入代码
import pymysql
pymysql.install_as_MySQLdb()
3、定义表字段
打开项目中的models.py文件
创建如下两个类,表示使用到数据库的表
class AddressInfo(models.Model):
'''地址表
类里面的字段代表数据表中的字段(name),数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度'''
add=models.CharField(max_length=50)
class Meta:
#元类
db_table = 'addressinfo'#定义数据表名称
verbose_name = '地址管理'#在网页端显示的名字
verbose_name_plural = verbose_name#去复数形式
def __str__(self):
return self.add
class UserInfo(models.Model):
""" 用户表 """
name=models.CharField(max_length=20)
addinfo=models.ForeignKey(AddressInfo)
#这个是两张表之间的关系,关系写在从表身上,ForeignKey()里面填写的是主表的类名
class Meta:
# 元类
db_table = 'userinfo'
verbose_name = '用户信息管理'
verbose_name_plural = verbose_name
def __str__ (self):
return self.name
4、数据库迁移
使用命令行在项目目录下执行命令
python manage.py makemigrations
python manage.py migrate
完成后打开数据库
可以看到除了django默认的数据表以外,addressinfo和userinfo表创建完成
5、使用admin管理创建的字段表
将设计的表注册到项目中的admin.py文件中
from user.models import AddressInfo,UserInfo
admin.site.register(UserInfo)
admin.site.register(AddressInfo)
创建超级用户
使用指令python manage.py createsuperuser
超级用户创建成功,如果忘记密码可以执行命令python manage.py changepassword admin
直接修改密码(admin为自定义的用户名)
用浏览器进入http://127.0.0.1:8000/admin/
在这个可视化页面中可以方便的增删改自定义表单的数据
6、admin页面细节调整
在项目的apps.py文件中可以添加代码
可以将首页中除django外唯一的英文USER替换为中文,不修改也无伤大雅
二、django数据库交互语法
对于存在外键的数据表进行修改或者增加操作时,需要写外键的id或者按照外键名获取外键名对应的id
1、基本查询语法
all,get,count,filter
from user.models import UserInfo
data1=UserInfo.bojects.all()#查询所有数据
#返回多个对象
data2=UserInfo.object.get(id=1)#按照指定条件查询
#返回一个符合关键词的单一对象
data3=UserInfo.objects.count()#查询符合条件的数据条数
#返回数据的条数
data4=UserInfo.objects.filter(id_lte=1)#查询多条符合条件的数据
#id_gt=1 id大于1的数据
#id_gte=3 id大于等于3的数据
#id_lt=1 id小于1的数据
#id_lte=1 id小于等于1的数据
#name__startswidth='王' 查找名字字段中带有王的数据
#格式:字段表模型类名.objects.方法()
2、基本的增加语句
方法一:
data1 = AddressInfo(add='北京',)#填写多个字段的数据
data1.save()#完成操作
方法二:
AddressInfo.objects.create(add='北京',)
3、基本删除语句
data1 = AddressInfo.objects.get(add='北京')
data1.delete()#使用任意查询语句后跟.delete()即可删除指定数据
4、基本修改语句
方法一:
data1 = AddressInfo.objects.get(add='北京')
data1.add='上海'#使用任意查询语句后跟列名直接使用等于即可修改
data1.sava()#保存修改
方法二:
AddressInfo.objects.all().update(add='北京')#直接修改,不需要保存修改
AddressInfo.objects.filter(name=name).update(add='北京')#update只能操作对象,get方法获得的字符串则不能使用update方法
三、网页与数据库交互
这里用到tag标签和view方法
使用方法:https://blog.csdn.net/changfcqxhy/article/details/90778848
1、html页面显示数据库返回的数据
html网页
<body>
<ul>
{% for obj in data %}
<li> {{ obj.name }}</li>
<li> {{ obj.addinfo }}</li>
{% endfor %}
</ul>
</body>
添加视图views
此处直接使用all方法查找所有数据
from user.models import UserInfo
def show(request):
data=UserInfo.objects.all()
context={'data':data}
return render(request,'show.html',context)
添加urls
from user import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/$',views.index),
url(r'^show/$',views.show),
]
运行服务器后打开网址 http://127.0.0.1:8000/show/
显示成功
2、html页面增加数据库数据
form表单中提交数据可以使用get请求也可以使用post请求
使用get请求时同理,使用正则表达式取出数据即可
这里仅演示使用post请求的方法
html页面
{% csrf_token %}防止csrf错误
<body>
<form method="POST" action="/adduser/">
{% csrf_token %}
<sapn>名字</sapn><input type="text" name="name">
<sapn>地址</sapn><input type="text" name="address">
<input type="submit" value="提交">
</form>
</body>
添加视图views
def adduser (request):
""" 添加用户数据视图 """
name=request.POST.get('name')#获取post请求返回的名字
address=request.POST.get('address')#获取post请求返回的地址
if request.POST.get('name'):#如果返回有数据
try:
addinfo=AddressInfo.objects.get(add=address)#试图查找地址
except:#已有地址中找不到则添加新地址
addinfo=AddressInfo.objects.create(add=address)#添加新的地址
UserInfo.objects.create(name=name,addinfo=addinfo)#将用户信息加入到用户表中
return render(request,'adduser.html')
添加urls
from user import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/$',views.index),
url(r'^show/$',views.show),
url(r'^adduser/$',views.adduser),
]
运行服务器之后打开网址 http://127.0.0.1:8000/adduser/
输入如下内容
提交后,服务器cmd中看到
成功收到post请求,没有报错,操作成功
新地址和新用户添加成功
3、html页面删除数据库数据
html页面
<body>
{% for obj in test %}
<h1>{{obj}}</h1>
{% endfor %}
<form method="POST" action="/delete/">
{% csrf_token %}
<select name="name">
{% for obj in data %}
<option value={{ obj.name }}>{{ obj.name }}</option>
{% endfor %}
</select>
<input type="submit" value="提交">
</form>
</body>
添加视图views
def delete(request):
'''删除用户数据'''
def ret(res):
'''返回的函数'''
data=UserInfo.objects.all()
context={'data':data}
context['test']=[res]#动态输出网页标题
return render(request,'delete.html',context)
if request.method=='GET':
res='请选择要删除的用户数据'
return ret(res)#get请求直接返回页面
else:
name=request.POST.get('name')#获取post请求返回的名字
UserInfo.objects.get(name=name).delete()#删除对应数据
res='%s的数据已删除,你可以继续选择要删除的数据'%name
return ret(res)
添加urls
from user import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/$',views.index),
url(r'^show/$',views.show),
url(r'^adduser/$',views.adduser),
url(r'^delete/$',views.delete),
]
运行服务器之后打开网址 http://127.0.0.1:8000/delete/
这里选择删除老王的数据
删除成功
mysql数据库中已经没有老王的数据了
4、html页面修改数据库数据
html页面
<body>
<h3>修改密码</h3>
<form method="POST" action="/cpwd">
{% csrf_token %}
<sapn>用户名</sapn><input type="text" name="username">
<sapn>原密码</sapn><input type="password" name="pwd">
<sapn>新密码</sapn><input type="password" name="npwd">
<sapn>确认密码</sapn><input type="password" name="cpwd">
<input type="submit" value="确认修改">
</form>
</body>
添加视图views
def alert (request):
""" 修改用户数据 """
def ret(res):
'''返回的函数'''
data=UserInfo.objects.all()
print('###',data)
context={'data':data}
context['test']=[res]#动态输出网页标题
print('###',context)
return render(request,'alert.html',context)
if request.method=='GET':
res='修改用户地址'
return ret(res)#get请求直接返回页面
else:
name=request.POST.get('name')#获取post请求返回的名字
address=request.POST.get('address')#获取post请求返回的地址
res='%s地址已修改为%s'%(name,address)
try:
addinfo=AddressInfo.objects.get(add=address)#试图查找地址
except:
addinfo=AddressInfo.objects.create(add=address)#添加新的地址
UserInfo.objects.filter(name=name).update(addinfo=addinfo)#按照用户名修改用户的地址
return ret(res)
添加urls
from user import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/$',views.index),
url(r'^show/$',views.show),
url(r'^adduser/$',views.adduser),
url(r'^delete/$',views.delete),
url(r'^alert/$',views.alert),
]
运行服务器之后打开网址 http://127.0.0.1:8000/alert/
修改小王的地址为深圳
修改完成
查询数据库
地址表中增加了深圳这个条目,同时小王的地址id已经修改为深圳代表的4