当前位置: 首页 > news >正文

有哪些网站可以做推文本地电脑静态网站建设

有哪些网站可以做推文,本地电脑静态网站建设,app推广接单网,怎样做 网站的快捷链接在后端服务器开发中#xff0c;特别是前后端分离的架构中数据库是非常重要的#xff0c;后端主要就是负责管理数据#xff0c;而我们经常使用的mysql、oracle 都是关系型数据库#xff0c;什么是关系型数据库#xff1f;就是建立在关系模型基础上的数据库#xff0c;而最… 在后端服务器开发中特别是前后端分离的架构中数据库是非常重要的后端主要就是负责管理数据而我们经常使用的mysql、oracle 都是关系型数据库什么是关系型数据库就是建立在关系模型基础上的数据库而最难处理的就是各个表之间的关联关系一般这种关系分为三种: 一对一 、一对多、多对多 一、数据表关联 1、一对多 表之间以对多的关系就是数据库中的 外键  下面我们举个例子比如一个医药系统中肯定会有客户的信息吧我们先定义一个客户的基本信息客户名称、联系电话、居住地址 vi Django_demo/paas/models.py class Customer(models.Model):# 客户名称name models.CharField(max_length200)# 联系电话phonenumber models.CharField(max_length200)# 地址address models.CharField(max_length200) 我们是一个医药系统肯定存在很多不同的药品类型同样也需要定义一个药品类型的表 Medicine药品表 包含一些药品名称、编号、描述信息 vi Django_demo/paas/models.py class Medicine(models.Model):# 药品名name models.CharField(max_length200)# 药品编号sn models.CharField(max_length200)# 描述desc models.CharField(max_length200) 有了药品信息、客户信息那么只要存在销售的话就一定会有订单信息 想一想我们订单的信息是不是和上面的两张表多少有一些关联比如订单中需要用到客户信息和药品信息 在实际观察中我们发现订单表里面会同时需要拿到上面两张表中的数据在下图中我们可以看到一个客户同时可能会有多个订单这种情况就是一对多或者说多对一 像是这种一对多的关系在数据库中是以外键形式表示的如果说一个表中的字段是外键那么他的值一定来源与其他表的主键 另外我们定义表的 Model类的时候如果没有指定主键字段migrate 的时候 Django 会为该Model对应的数据库表自动生成一个id字段作为主键 #导入数据库 python manage.py makemigrations python manage.py migrate #查看 desc paas_customer; 现在我们要生成订单表按照实际情况我们订单表的字段里面也会有客户的信息表示谁下的订单而用户的信息需要使用外键去关联客户的主键而客户表也就是customer表的主键就是id字段Django中定义外键 的方法就是 Model类的该属性字段 值为ForeignKey) vi Django_demo/paas/models.py import datetime class Order(models.Model):# 订单名name models.CharField(max_length200,nullTrue,blankTrue)# 创建日期create_date models.DateTimeField(defaultdatetime.datetime.now)# 客户customer models.ForeignKey(Customer,on_deletemodels.PROTECT) 上面定义的customer是外键让他去找Customer表的主键获取数据而这里设置了一个on_delete的参数这个意思是当主键被删除了那么外键这个数据还要不要了 1、CASCADE: 跟随主机一起把外键数据删除 2、PROTECT   禁止删除如果非要删除就先清除外键数据后才能删除对应主键 3、SET_NULL   删除后外键数据修改为null 注意 外键字段实际在数据库表中的字段名是DjangoForeignKey定义字段名加上后缀_id 比如上面在执行了 migrate 命令更新数据库后customer 这个外键字段实际上在 数据库表中的字段名 是 customer_id python manage.py makemigrations python manage.py migrate #查看 desc paas_info; 返回 mysql desc paas_order; --------------------------------------------------------------- | Field | Type | Null | Key | Default | Extra | --------------------------------------------------------------- | id | bigint | NO | PRI | NULL | auto_increment | | name | varchar(200) | YES | | NULL | | | create_date | datetime(6) | NO | | NULL | | | customer_id | bigint | NO | MUL | NULL | | --------------------------------------------------------------- 4 rows in set (0.00 sec)2、一对一 上面的外键案例可以说是一对多或者多对一而有时候是一对一的情况 比如某个学校的学生表 和学生的地址表就形成一对一的关系即 一条主键所在表的记录 只能对应一条 外键所在表的记录而Django 中 用 OneToOneField 对象 实现 一对一 的关系 vi Django_demo/paas/models.py class Student(models.Model):# 姓名name models.CharField(max_length200)# 班级classname models.CharField(max_length200)# 描述desc models.CharField(max_length200)class ContactAddress(models.Model):# 一对一 对应学生 student models.OneToOneField(Student, on_deletemodels.PROTECT)# 家庭homeaddress models.CharField(max_length200)# 电话号码phone models.CharField(max_length200) Django发现这样一对一定定义它会在migrate的时候在数据库中定义该字段为外键的同时 加上 uniqueTrue 约束表示在此表中所有记录的该字段 取值必须唯一不能重复 3、多对多 数据库中还存在一种多对多的关系在order订单表中 一个订单可以采购多种药品就对应 Medicine表里面的多种药品 而一种药品也可以被多个订单采购 那么Order表 和 Medicine表 之间就形成了多对多的关系 Django是通过 ManyToManyField 对象 表示 多对多的关系的 vi Django_demo/paas/models.py import datetime class Order(models.Model):# 订单名name models.CharField(max_length200,nullTrue,blankTrue)# 创建日期create_date models.DateTimeField(defaultdatetime.datetime.now)# 客户customer models.ForeignKey(Customer,on_deletemodels.PROTECT)# 订单购买的药品和Medicine表是多对多 的关系medicines models.ManyToManyField(Medicine, throughOrderMedicine)class OrderMedicine(models.Model):#添加外键order models.ForeignKey(Order, on_deletemodels.PROTECT)medicine models.ForeignKey(Medicine, on_deletemodels.PROTECT)# 订单中药品的数量 一种特殊的类型表示非负整数amount models.PositiveIntegerField() 我们上面通过medicines models.ManyToManyField(Medicine, throughOrderMedicine) 去指定Order表和Medicine表的对应关系其实不会在Order表上面创建medicines的字段 python manage.py makemigrations python manage.py migrate #查看 desc paas_OrderMedicine; 4、管理药品实现 我们在 mgr 目录下面新建 medicine.py处理 客户端发过来的 列出药品、添加药品、修改药品、删除药品 的请求需要运用前面的数据库增删改查的方法 vi Django_demo/mgr/medicine.py from django.http import JsonResponse# 导入 Medicine 对象定义(这块可能显示模块导入不正常忽略 from paas.models import Medicineimport jsondef Orderdispatcher(request):# 根据session判断用户是否是登录的管理员用户if usertype not in request.session:return JsonResponse({ret: 302,msg: 未登录,redirect: /mgr/sign.html},status302)if request.session[usertype] ! mgr:return JsonResponse({ret: 302,msg: 用户非mgr类型,redirect: /mgr/sign.html},status302)# 将请求参数统一放入request 的 params 属性中方便后续处理# GET请求 参数 在 request 对象的 GET属性中if request.method GET:request.params request.GET# POST/PUT/DELETE 请求 参数 从 request 对象的 body 属性中获取elif request.method in [POST,PUT,DELETE]:# 根据接口POST/PUT/DELETE 请求的消息体都是 json格式request.params json.loads(request.body)# 根据不同的action分派给不同的函数进行处理action request.params[action]if action list_medicine:return listmedicine(request)elif action add_medicine:return addmedicine(request)elif action modify_medicine:return modifymedicine(request)elif action del_medicine:return deletemedicine(request)else:return JsonResponse({ret: 1, msg: 不支持该类型http请求})def listmedicine(request):# 返回一个 QuerySet 对象 包含所有的表记录qs Medicine.objects.values()# 将 QuerySet 对象 转化为 list 类型# 否则不能 被 转化为 JSON 字符串retlist list(qs)return JsonResponse({ret: 0, retlist: retlist})def addmedicine(request):info request.params[data]# 从请求消息中 获取要添加客户的信息# 并且插入到数据库中medicine Medicine.objects.create(nameinfo[name] ,sninfo[sn] ,descinfo[desc])return JsonResponse({ret: 0, id:medicine.id})def modifymedicine(request):# 从请求消息中 获取修改客户的信息# 找到该客户并且进行修改操作medicineid request.params[id]newdata request.params[newdata]try:# 根据 id 从数据库中找到相应的客户记录medicine Medicine.objects.get(idmedicineid)except Medicine.DoesNotExist:return {ret: 1,msg: fid 为{medicineid}的药品不存在}if name in newdata:medicine.name newdata[name]if sn in newdata:medicine.sn newdata[sn]if desc in newdata:medicine.desc newdata[desc]# 注意一定要执行save才能将修改信息保存到数据库medicine.save()return JsonResponse({ret: 0})def deletemedicine(request):medicineid request.params[id]try:# 根据 id 从数据库中找到相应的药品记录medicine Medicine.objects.get(idmedicineid)except Medicine.DoesNotExist:return {ret: 1,msg: fid 为{medicineid}的客户不存在}# delete 方法就将该记录从数据库中删除了medicine.delete()return JsonResponse({ret: 0}) 添加路由 vi Django_demo/mgr/urls.py from django.urls import pathfrom .k8s import dispatcher from .sign_in_out import signin,signoutfrom .medicine import orderdispatcher #添加 urlpatterns [path(customers/, dispatcher),path(medicines/, orderdispatcher), #添加 必须带斜杠path(signin, signin),path(signout, signout),] 5、添加药品 vi main.py import requests,pprint#添加认证 payload {username: root,password: 12345678 } #发送登录请求 response requests.post(http://127.0.0.1:8000/api/mgr/signin,datapayload) #拿到请求中的认证信息进行访问 set_cookie response.headers.get(Set-Cookie)# 构建添加 客户信息的 消息体是json格式 payload {action:add_medicine,data:{name:板蓝根,sn:133,desc:感冒药} } urlhttp://127.0.0.1:8000/api/mgr/medicines/ if set_cookie:# 将Set-Cookie字段的值添加到请求头中headers {Cookie: set_cookie}# 发送请求给web服务response requests.post(url,jsonpayload,headersheaders)pprint.pprint(response.json())json类型说明 刚才上面我们使用了查询和添加数据但是发现一个问题两个请求传参的时候稍有不同 #datapayload 表示这个请求携带的参数是以表单的形式也就是字符串形式传输给后端的 requests.post(url,datapayload)#jsonpayload 表示参数是以json的形式传输给后端的 requests.post(url,jsonpayload) 在使用时要特别注意我卡了半天才看到。。 6、查询药品 vi main.py import requests,pprintpayload {username: root,password: 12345678 } #发送登录请求 response requests.post(http://127.0.0.1:8000/api/mgr/signin,datapayload) #拿到请求中的认证信息进行访问 set_cookie response.headers.get(Set-Cookie) if set_cookie:# 将Set-Cookie字段的值添加到请求头中headers {Cookie: set_cookie}# 发送带有Cookie的新请求 修改url到新的路由response requests.get(http://127.0.0.1:8000/api/mgr/medicines/?actionlist_medicine,headersheaders)pprint.pprint(response.json())返回 {ret: 0,retlist: [{desc: 192.168.1.2, id: 1, name: abc, sn: 133},{desc: 感冒药, id: 2, name: 板蓝根, sn: 133}]} 第一行是我写错了添加上的一会当作删除的案例 遇到的问题 在访问url的时候要确定url访问时是否需要带上/  如果定义的urls上有/那边必须要带上斜杠不然会报错 7、修改药品 vi main.py import requests,pprint#添加认证 payload {username: root,password: 12345678 } #发送登录请求 response requests.post(http://127.0.0.1:8000/api/mgr/signin,datapayload) #拿到请求中的认证信息进行访问 set_cookie response.headers.get(Set-Cookie)# 构建添加 客户信息的 消息体是json格式 payload {action:modify_medicine,id: 1,newdata:{name:诺氟沙星,sn:141,desc:无} } urlhttp://127.0.0.1:8000/api/mgr/medicines/if set_cookie:# 将Set-Cookie字段的值添加到请求头中headers {Cookie: set_cookie}# 发送请求给web服务response requests.post(url,jsonpayload,headersheaders)pprint.pprint(response.json())再次查询 {ret: 0,retlist: [{desc: 无, id: 1, name: 诺氟沙星, sn: 141},{desc: 感冒药, id: 2, name: 板蓝根, sn: 133}]} 8、删除药品 import requests,pprint#添加认证 payload {username: root,password: 12345678 } #发送登录请求 response requests.post(http://127.0.0.1:8000/api/mgr/signin,datapayload) #拿到请求中的认证信息进行访问 set_cookie response.headers.get(Set-Cookie)# 构建添加 客户信息的 消息体是json格式 payload {action:del_medicine,id:1, } urlhttp://127.0.0.1:8000/api/mgr/medicines/if set_cookie:# 将Set-Cookie字段的值添加到请求头中headers {Cookie: set_cookie}# 发送请求给web服务response requests.post(url,jsonpayload,headersheaders)pprint.pprint(response.json())返回 {ret: 0, retlist: [{desc: 感冒药, id: 2, name: 板蓝根, sn: 133}]} 可以看到除了查询以外增加、修改、删除的操作基本是一致的只需要修改携带参数中的动作以及传入的参数值即可 二、数据库关联操作sql 1、一对多 #先查询用户的id,然后基于id查询外键对应的订单 select * from paas_order where customer_id (select id from paas_customer where name zhangsan); 一对多我们查询指定的一个客户id然后基于id去订单表中获取所以用户相关的订单 2、多对多 我们上面使用的时候添加过这么一个表  OrderMedicine  class OrderMedicine(models.Model):#添加外键order models.ForeignKey(Order, on_deletemodels.PROTECT)medicine models.ForeignKey(Medicine, on_deletemodels.PROTECT)# 订单中药品的数量 一种特殊的类型表示非负整数amount models.PositiveIntegerField() 多对多表示什么意思呢我们建立的上面的表是将order订单表 和Medicine药品表进行关联的一个中间表我们在给前面两张表添加数据的时候还需要单独去给中间表添加一次数据用来声明订单和药品的关系通过这张中间表我们就能查询药品是那些客户进行购买也可以查询那些客户购买了那些药品我们做一个案例 Django_demo/mgr/admin.py from paas.models import Customer,Medicine,Order,OrderMedicine admin.site.register([Customer,Medicine,Order,OrderMedicine]) 访问admin页面前面我们添加了很多的数据除了客户表信息以外都先删除一下 我们先给Medicines药品表  和orders 订单表 添加一条信息 上面给药品添加了感冒颗粒订单表中给张三用户添加了一个test的订单 现在是没有任何关联机制的这两张表也没有交互我们在order medicines表中添加下两个订单的关联 我们关联了第一条数据将刚才的订单信息和药品信息以及数量一并放入到了中间表中 mysql select * from paas_ordermedicine; ----------------------------------- | id | amount | medicine_id | order_id | ----------------------------------- | 1 | 10 | 6 | 5 | ----------------------------------- 1 row in set (0.00 sec)这里因为存放了药品的id和订单的id我们就可以根据这个表来查询关联的数据信息比如我想要看看订单表里面test订单对应下单了什么药品买了多少 #找到订单中的id select id from paas_order where name test;#基于id查询关系表中药品 select medicine_id,amount from paas_ordermedicine where order_id 5;#命令组合 mysql select medicine_id,amount from paas_ordermedicine where order_id (select id from paas_order where name test); --------------------- | medicine_id | amount | --------------------- | 6 | 10 | --------------------- 1 row in set (0.00 sec)
http://www.zqtcl.cn/news/304778/

相关文章:

  • 做网站的标准国外html5网站模板
  • 手机网站设计公司立找亿企邦郑州seo网络营销技术
  • 网站设计优秀作品网站开发的背景知识
  • 响应式网站建设流程温州网站优化案例
  • 谢岗镇网站建设上海的网吧
  • 厦门网站建设 智多星做印刷的有什么网站
  • 怎样做原创短视频网站wordpress文章加音频
  • 建设一个网站所需要注意的最有前途的15个专业
  • 橱柜手机网站模板软件设计说明书
  • 山西云起时网站建设wordpress 字体大小
  • 网站建设详细报价电商开发系统
  • 搜索引擎营销的主要方法开封seo推广
  • 怎么在网上找做网站的客户安徽安能建设集团网站
  • 乾安网站建设哪家专业h5在线编辑
  • 公司网站建设模块简介广17网站一起做网店
  • 外包网站多少钱柳市建设网站
  • 做外贸站推广全国网页制作大赛
  • 手机网站关键词排名微信小程序怎么做网页
  • 利用万网做网站wordpress过滤敏感
  • 大连 响应式网站制作郑州网站建设中国建设建设银行
  • 网站关键词布局关于静态网站开发相关新闻
  • 安徽新站优化网站建设哪些好
  • 网站详细页制作c2c模式的网站
  • 网站与网页之间的区别是什么意思通过微信发布诱导分享的美文或者集赞活动属于哪种网络营销方式
  • 可信网站代码想学做网站从哪里入手
  • 做公众号选择图片的网站wordpress怎么看代码
  • 个人 中小企业公司网站建设方案百度网页版链接地址
  • 青岛网站推广方案网线制作心得与体会
  • 杭州网站优化公司哈尔滨企业网站模板建站
  • 洛阳免费网站建设自己做网站最新视频教程