中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

建設(shè)外貿(mào)商城網(wǎng)站制作怎樣在百度上發(fā)布廣告

建設(shè)外貿(mào)商城網(wǎng)站制作,怎樣在百度上發(fā)布廣告,wordpress賬號交易,快遞網(wǎng)站怎么制作django中實現(xiàn)事務(wù)的幾種方式 # 1 全局開啟事務(wù)---> 全局開啟事務(wù),綁定的是http請求響應(yīng)整個過程DATABASES {default: {#全局開啟事務(wù),綁定的是http請求響應(yīng)整個過程ATOMIC_REQUESTS: True, }}from django.db import transaction# 局部禁用事務(wù)trans…

django中實現(xiàn)事務(wù)的幾種方式

# 1 全局開啟事務(wù)---> 全局開啟事務(wù),綁定的是http請求響應(yīng)整個過程DATABASES = {'default': {#全局開啟事務(wù),綁定的是http請求響應(yīng)整個過程'ATOMIC_REQUESTS': True, }}from django.db import transaction# 局部禁用事務(wù)@transaction.non_atomic_requestsdef seckill(request):return HttpResponse('秒殺成功')# 2 一個視圖函數(shù)在一個事物中# fbv開啟from django.db import transaction@transaction.atomicdef seckill(request):return HttpResponse('秒殺成功')# cbv開啟from django.db import transactionfrom rest_framework.views import APIViewclass SeckillAPIView(APIView):@transaction.atomicdef post(self, request):pass# 3 局部使用事務(wù)
from django.db import transaction
def seckill(request):with transaction.atomic():pass  # 都在一個事物中return HttpResponse('秒殺成功')

事物的回滾和保存點


# 1 普通事務(wù)操作(手動操作)
transaction.atomic()  # 開啟事務(wù)
transaction.commit()  # 提交事務(wù)
transaction.rollback() # 回滾事務(wù)# 2 可以使用上下文管理器來控制(自動操作)
with transaction.atomic():  # 自動提交和回滾# 3 保存點-開啟事務(wù)干了點事設(shè)置保存點1干了點事設(shè)置一個保存點2干了點事回滾到干完第二個事,回滾到保存點2'''
在事務(wù)操作中,我們還會經(jīng)常顯式地設(shè)置保存點(savepoint)
一旦發(fā)生異?;蝈e誤,我們使用savepoint_rollback方法讓程序回滾到指定的保存點
如果沒有問題,就使用savepoint_commit方法提交事務(wù)
'''from .models import Book
from django.db import transaction
def seckill(request):with transaction.atomic():# 設(shè)置回滾點,一定要開啟事務(wù)sid = transaction.savepoint()print(sid)try:book = Book.objects.get(pk=1)book.name = '紅樓夢'book.save()except Exception as e:# 如發(fā)生異常,回滾到指定地方transaction.savepoint_rollback(sid)print('出異常了,回滾')# 如果沒有異常,顯式地提交一次事務(wù)transaction.savepoint_commit(sid)return HttpResponse('秒殺成功')
transaction.atomic()  # 開啟事務(wù)
sid = transaction.savepoint() # 設(shè)置保存點
transaction.savepoint_rollback(sid) # 回滾到保存點
transaction.savepoint_commit(sid) #提交保存點

事務(wù)提交后,執(zhí)行某個回調(diào)函數(shù)

# 有的時候我們希望當(dāng)前事務(wù)提交后立即執(zhí)行額外的任務(wù),比如客戶下訂單后立即郵件通知賣家
###### 案例一##################
def send_email():print('發(fā)送郵件給賣家了')
def seckill(request):with transaction.atomic():# 設(shè)置回滾點,一定要開啟事務(wù)sid = transaction.savepoint()print(sid)try:book = Book.objects.get(pk=1)book.count = book.count-1book.save()except Exception as e:# 如發(fā)生異常,回滾到指定地方transaction.savepoint_rollback(sid)else:transaction.savepoint_commit(sid)#transaction.on_commit(send_email)transaction.on_commit(lambda: send_sms.delay('1898288322'))return HttpResponse('秒殺成功')##### 案例二:celery中使用###
transaction.on_commit(lambda: send_sms.delay('1898288322'))

django實現(xiàn)悲觀鎖樂觀鎖案例

# 線上賣圖書-圖書表  圖書名字,圖書價格,庫存字段-訂單表: 訂單id,訂單名字# 表準(zhǔn)備class Book(models.Model):name = models.CharField(max_length=32)price = models.IntegerField()  #count = models.SmallIntegerField(verbose_name='庫存')class Order(models.Model):order_id = models.CharField(max_length=64)order_name = models.CharField(max_length=32)# 使用mysql
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'lqz','HOST': '127.0.0.1','PORT': '3306','USER': 'lqz','PASSWORD': '123',}
}# 創(chuàng)建lqz數(shù)據(jù)庫

原生mysql悲觀鎖

begin; # 開啟事務(wù)select * from goods where id = 1 for update;  # 行鎖# order表中加數(shù)據(jù)update goods set stock = stock - 1 where id = 1; # 更新commit; #提交事務(wù)

orm實現(xiàn)上述

#1  使用悲觀鎖實現(xiàn)下單
@transaction.atomic  # 整個過程在一個事物中---》改兩個表:book表減庫存,訂單表生成記錄
def seckill(request):# 鎖住查詢到的book對象,直到事務(wù)結(jié)束sid = transaction.savepoint() # 保存點# 悲觀鎖: select_for_update()# 加鎖了--》行鎖還是表鎖? 分情況,都有可能#book = Book.objects.select_for_update().filter(pk=1).first()  # 加悲觀鎖,行鎖,鎖住當(dāng)前行if book.count > 0:print('庫存可以,下單')# 訂單表插入一條Order.objects.create(order_id=str(datetime.datetime.now()), order_name='測試訂單')# 庫存-1,扣減的時候,判斷庫存是不是上面查出來的庫存,如果不是,就回滾time.sleep(random.randint(1, 4))  # 模擬延遲book.count=book.count-1book.save()transaction.savepoint_commit(sid)  # 提交,釋放行鎖return HttpResponse('秒殺成功')else:transaction.savepoint_rollback(sid) #回滾,釋放行鎖return HttpResponse('庫存不足,秒殺失敗')

樂觀鎖秒殺--》庫存還有,有的人就沒成功

# 2 樂觀鎖秒殺--普通版
@transaction.atomic
def seckill(request):# 鎖住查詢到的book對象,直到事務(wù)結(jié)束sid = transaction.savepoint()book = Book.objects.filter(pk=1).first()  # 沒加鎖count = book.countprint('現(xiàn)在的庫存為:%s' % count)if book.count > 0:print('庫存可以,下單')Order.objects.create(order_id=str(datetime.datetime.now()), order_name='測試訂單-樂觀鎖')# 庫存-1,扣減的時候,判斷庫存是不是上面查出來的庫存,如果不是,就回滾# time.sleep(random.randint(1, 4))  # 模擬延遲res = Book.objects.filter(pk=1, count=count).update(count=count - 1)if res >= 1:  # 表示修改成功transaction.savepoint_commit(sid)return HttpResponse('秒殺成功')else:  # 修改不成功,回滾transaction.savepoint_rollback(sid)return HttpResponse('被別人改了,回滾,秒殺失敗')else:transaction.savepoint_rollback(sid)return HttpResponse('庫存不足,秒殺失敗')

http://m.risenshineclean.com/news/64006.html

相關(guān)文章:

  • 有贊做網(wǎng)站360推廣
  • 東莞做網(wǎng)站一年費用網(wǎng)站優(yōu)化seo培
  • 網(wǎng)站跳出率一般多少公司網(wǎng)站設(shè)計公司
  • 網(wǎng)站建設(shè)的合同書愛站小工具計算器
  • iis網(wǎng)站asp.net部署投放廣告找什么平臺
  • 登錄功能網(wǎng)站怎么做的搜索引擎優(yōu)化是什么意思啊
  • 網(wǎng)站自適應(yīng)手機怎么一鍵生成網(wǎng)頁
  • 重慶疫情最新消息今天seo在線論壇
  • 深圳橫崗做網(wǎng)站的推廣網(wǎng)上國網(wǎng)
  • wordpress更改網(wǎng)站url無法訪問軟文推廣營銷服務(wù)平臺
  • 建行網(wǎng)站會員重慶seo團隊
  • 做響應(yīng)式的網(wǎng)站seo教程視頻論壇
  • 網(wǎng)站框架模板app推廣賺錢
  • 怎么做重慶時時彩網(wǎng)站代理今日國內(nèi)新聞大事
  • 網(wǎng)站建設(shè)價格熱線游戲推廣員是違法的嗎
  • 用php做網(wǎng)站要用什么軟件萬網(wǎng)域名續(xù)費
  • 一個網(wǎng)站開發(fā)的流程圖nba西部最新排名
  • 專業(yè)做醫(yī)院網(wǎng)站怎么引流到微信呢
  • 富陽網(wǎng)站開發(fā)互聯(lián)網(wǎng)產(chǎn)品推廣
  • 建筑設(shè)計作品展示網(wǎng)站吉林seo管理平臺
  • 如何自己做直播網(wǎng)站網(wǎng)絡(luò)營銷措施有哪些
  • 受歡迎的廣州做網(wǎng)站搜狗搜索推廣
  • 門戶網(wǎng)站建設(shè)工作流程北京出大大事了
  • 成都室內(nèi)設(shè)計公司排名前十網(wǎng)站seo具體怎么做
  • 專業(yè)建站推廣平臺排行榜有哪些
  • asp網(wǎng)站500錯誤iis7佛山網(wǎng)站快速排名提升
  • 網(wǎng)站建設(shè)pdf下載關(guān)鍵詞優(yōu)化精靈
  • php做網(wǎng)站模板網(wǎng)站建設(shè)詳細(xì)方案
  • 黨建網(wǎng)站安全建設(shè)alexa全球網(wǎng)站排名分析
  • 聯(lián)通專線做網(wǎng)站簡述如何優(yōu)化網(wǎng)站的方法