中成药治疗白癜风 https://m-mip.39.net/nk/mipso_4790093.html
#默认使用的是sqlite3DATABASES={default:{ENGINE:django.db.backends.sqlite3,NAME:os.path.join(BASE_DIR,db.sqlite3),}}#django链接mysql1、配置文件中更改配置DATABASES={default:{ENGINE:django.db.backends.mysql,NAME:django_study,USER:root,PASSWORD:,HOST:.0.0.1,PORT:,CHARSET:utf8}}2、代码声明django默认使用的是MySQLdb模块链接MySQL的但是该模块的兼容性不好,需要手动改为pymysql链接你需要告诉django不要使用默认的MySQLdb,用pymysql#在项目名下的init或者任意的应用名下的init文件中书写以下代码都可以importpymysqlpymysql.install_as_MySQLdb()djangoORM
"""orm,对象关系映射类表对象记录对象属性记录某个字段对应的值应用下面的models.py文件"""#1、先去models.py中书写一个类classUser(models.Model):#以下相当于创建表字段id=models.AutoField(primary_key=True,verbose_name=主键)#等价于idintprimary_keyauto_incrementusername=models.CharField(max_length=32,verbose_name=用户名)#等价于usernamevarchar(32)#password=models.IntegerField()#等价于passwordintpassword=models.CharField(max_length=64,verbose_name=密码)#age=models.IntegerField()#等价于passwordint#info=models.CharField(max_length=32,verbose_name=个人简介,null=True)#设置可以为空#hobby=models.CharField(max_length=32,verbose_name=兴趣爱好,default=study)#设置默认值"""CharField必须指定max_length参数,不指定直接报错verbose_name该参数是所有字段都有的,就是用来对字段的解释"""#2、数据库迁移命令:pythonmanage.pymakemigrations#将操作记录记录到migrations文件夹中pythonmanage.pymigrate#将操作真正的同步到数据库中#只要你修改了models.py中跟数据库相关的代码,就必须重新执行上述的两条命令classAuthor(models.Model):#由于一张表中必须有一个主键字段,并且一般情况下都叫id字段#所以orm在你不定义主键字段的时候,自动帮你创建一个id字段#也就意味着,后续我们在创建模型表的时候主键字段名没有额外的叫法,那么主键字段可以省略不写username=models.CharField(max_length=32)#等价于usernamevarchar(32)password=models.IntegerField()#等价于passwordint字段的增删改查
#字段的增加增加时默认你的表中是有数据的,需要你为之前已经有的数据设置该字段的默认值#1、可以在添加时的终端中直接给出默认值#2、设置可以为空info=models.CharField(max_length=32,verbose_name=个人简介,null=True)#3、直接给字段在设置默认值hobby=models.CharField(max_length=32,verbose_name=兴趣爱好,default=study)#字段的修改直接修改代码,然后执行两条数据库迁移命令即可#字段的删除直接注释掉要删除字段的代码,然后执行两条数据库迁移命令即可"危险,执行完毕后,字段对应的数据全都没有了,不要轻易注释数据库操作代码。"数据的增删改查
#查res=models.User.objects.filter(username=username)"""返回值:先看成是列表套数据对象的格式支持索引取值,但是不支持负数索引推荐使用.first()user_obj=models.User.objects.filter(username=username).first()"""filter可以携带多个参数,参数与参数之间默认是and关系,与SQL语句的where类似#增#先导入models.pyfromapp_1importmodelsdefregister(request):ifrequest.method==POST:print(register)username=request.POST.get(username)password=request.POST.get(password)#第一种#直接将数据存入数据库#res=models.User.objects.create(username=username,password=password)#返回值是当前被创建对象本身#print(res)#第二种user_obj=models.User(username=username,password=password)user_obj.save()returnrender(request,register.html)数据的查改删案例
#先将数据的数据全展示到前端,然后给每个数据两个按钮,一个编辑一个删除#编辑功能点击编辑按钮向后端发送编辑用户的请求"""如何告诉后端,你想编辑哪个用户的信息将编辑按钮所在行的主键值发送给后端利用URL问号后面携带参数的方式传送主键值tbody{%foruser_objindata%}trtd{{user_obj.id}}/tdtd{{user_obj.username}}/tdtd{{user_obj.password}}/tdtdahref="/edit_user/?user_id={{user_obj.id}}"class="btnbtn-xsbtn-primary"编辑/aahref="/del_user/?user_id={{user_obj.id}}"class="btnbtn-xsbtn-danger"删除/a/td/tr{%endfor%}/tbody"""#后端查询出用户想要编辑的数据对象,展示到前端页面,共用户查看和编辑。#编辑功能View全代码defedit_user(request):#获取URL问号后面的参数edit_id=request.GET.get(user_id)#查询当前用户想要编辑的数据对象edit_obj=models.User.objects.filter(id=edit_id).first()ifrequest.method==POST:#获取post请求提交来的数据new_username=request.POST.get(username)new_password=request.POST.get(password)#去数据库中修改对应的数据内容#修改数据方式一:#models.User.objects.filter(id=edit_id).update(username=new_username,password=new_password)"""将filter查询出来的列表中所有的对象全部更新批量更新操作只修改被修改的数据"""#修改数据方式二:edit_obj.username=new_usernameedit_obj.password=new_passwordedit_obj.save()"""上述方法当字段特别多的时候,效率会特别低,从头到尾将数据的所有字段全部都更新一遍,无论该字段是否被修改"""#使用重定向再跳转到数据展示页面returnredirect(/showuserlist/)print(user_id,edit_id)#将选择要修改的数据对象展示到页面上returnrender(request,edit_user.html,locals())#删除功能"""跟编辑功能逻辑类似"""defdel_user(request):#获取URL问号后面的参数del_id=request.GET.get(user_id)#查询当前用户想要删除的数据对象#del_obj=models.User.objects.filter(id=del_id).first()models.User.objects.filter(id=del_id).delete()#可以批量删除#重定向,再跳转回显示用户列表页面returnredirect(/showuserlist/)删除还应该做二次确认功能,后面再说删除数据一般都不会真正的删除,都只是修改标识字段的值django表关系
fromdjango.dbimportmodels#Createyourmodelshere.fromdjango.dbimportmodels#Createyourmodelshere.#创建表关系,先将基表创建出来classBook(models.Model):title=models.CharField(max_length=32)price=models.DecimalField(max_digits=8,decimal_places=2)#总共8位,小数点后占两位"""图书和出版社一对多,并且书是多的一方,所以外键字段放在书表里面"""publish=models.ForeignKey(to=Publish)#默认就是与出版社表的主键字段做外键关联#如果字段对应的是ForeignKey,那么ORM会自动在字段的后面加上_id#如果你加上了,ORM依然会在后面继续加。"""图书和作者是多对多的关系,外键字段在任意一方都可以,推荐建在查询频率较高的一方"""authors=models.ManyToManyField(to=Author)"""authors是一个虚拟字段,主要用来告诉ORM,书籍和作者是多对多的关系让ORM自动创建第三张表"""classPublish(models.Model):name=models.CharField(max_length=32)addr=models.CharField(max_length=32)classAuthor(models.Model):name=models.CharField(max_length=32)age=models.IntegerField()"""作者与作者详情是一对一的关系,外键字段建在任意一方都可以,但是推荐你建在查询频率较高的表中"""author_detail=models.OneToOneField(to=AuthorDetail)"""OneToOneField也会自动给字段加_id"""classAuthorDetail(models.Model):phone=models.BigIntegerField()#可以直接使用字符类型addr=models.CharField(max_length=32)"""orm中如何定义三种关系publish=models.ForeignKey(to=Publish)authors=models.ManyToManyField(to=Author)author_detail=models.OneToOneField(to=AuthorDetail)ForeignKey和OneToOneField会自动添加_id后缀。ManyToManyField会自动添加第三张表"""#在django1.x的版本中外键默认的都是级联更新删除的。#多对多的表关系可以有好几种创建方式,暂时介绍一种。yixiaoyao