来源视频p42-48
1.操作表要求install pymysql mysqlclient
1.连接设置:settings.py中
前提:数据库已启动,已建database
注释掉其他的DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'db_test', #数据库名
'USER': 'root',
'PASSWORD': 'yzy448637',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
2.Django操作
2.1在models.py创建类
from django.db import models
class UserInfo(models.Model):
name = models.CharField(max_length=32)
pwd = models.CharField(max_length=64)
age = models.IntegerField()
"""
相当于
create app01_userinfo(
id int auto_increment primary,
name varchar(32),
pwd varchar(64),
pwd int,
)
"""
2.2创建数据表table 在终端输入
python manage.py makemigrations python manage.py migrate
前提:1.app需已注册(settings.py中新增INSTALLED_APPS,一般在上一章已经做好) 2.命令行操作地址为所在目录 进一步验证注册是否成功,可在cmd中查看
新建表(写入类)时或删除表(删除掉类或注释掉类),终端重复输入
已有表内删除某一表头(即删除列),注释掉单独行即可。同样终端输入
已有表内新增某一表头(即新增列),给一个默认值(如:age = models.IntegerField(default=18)),否则终端输入后会“报错”。
新建数据、获取数据、删除数据、更新数据(删除、更新基于获取)
#########新增表内容############
#有默认值或允许空的值,可以不添加
#UserInfo.objects.create(name="yingzongyuan", pwd="123456", age=18)
#########获取###########
#获取的精华就是筛选
#获取全部
#data_list = UserInfo.objects.all()
#类似于列表内嵌套字典 queryset
#for obj in data_list:
# print(obj.id, obj.name, obj.pwd, obj.age)
########删除表内容############
#获取+delete()
#条件筛选后删除
#UserInfo.objects.filter(id=2).delete()
#全部删除
#UserInfo.objects.all().delete()
########更新#######
#获取+update()
案例1:在网页里显示用户信息(源自数据库数据)
1.url新建连接
path('info/user', views.user_info),
2.views新建函数
def user_info(request):
#获取数据库中所有用户信息
data_list = UserInfo.objects.all()
return render(request, "user_info.html", {"data_list": data_list})
3.新建user_info.html
用户列表
| ID | 姓名 | 密码 | 年龄 |
|---|---|---|---|
| {{ obj.id }} | {{ obj.name }} | {{ obj.pwd }} | {{ obj.age }} |
根据用户名判断是否注册:已注册则重新跳转并提醒已注册,未注册则跳出注册成功,且写入数据库
1.url新建连接
#用户注册
path('register/', views.register)
2.views新建函数
def register(request):
#用户注册
#UserInfo.objects.create(name="liguixi", pwd="123456", age=18)
if request.method == "GET": #判断请求类型
return render(request, "register.html")
name = request.POST.get("name")
pwd = request.POST.get("pwd")
age = int(request.POST.get("age"))
if name in [obj.name for obj in UserInfo.objects.all()]: #判断name是否在数据库中存在
return render(request, "register.html", {"error_msg": "用户已注册"})
UserInfo.objects.create(name=name, pwd=pwd, age=age)
return redirect('/info/user') #跳转至网站下链接
3.新建register.html
案例3 :删除用户信息用户注册
参考视频P48后半段
基于案例1,以get请求带参数(delete/?name=“我是参数”)传回数据库操作
1.url新建连接
#用户删除
path('delete/', views.delete),
2.views新建函数
def delete(request):
#删除用户
name = request.GET.get("name") #取到name值
UserInfo.objects.filter(name=name).delete()
return redirect('/info/user') #重定位至用户信息页面
3.基于案例1 user_info.html:改动如框选



