抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

用httpx的异步方法来更新requests的,快了一些

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
from django.contrib import admin
from import_export import resources
from import_export.admin import ImportExportModelAdmin, ImportExportActionModelAdmin
import json,requests
from cuifei.models import 催费表类,可收表类,可收表19年,可收表20
import httpx,json,time,math
import asyncio,datetime,calendar
from django.forms import TextInput, Textarea
from django.db import models
from django.db.models import Q
admin.site.site_header = '催费'
admin.site.site_title = '催费'
# admin.site.register(催费表类)



def 取结果(r):
if r['obj']:
j = []
for i in r['obj']:
j.append(i['fwqx'])
return max(j),r['obj'][0]['jbrdh']
else:
return None,None
headers = {
'Content-Type': 'application/json',
'Authorization': '手工打码',
}

url_by_税号 = '手工打码'
查税号URL= '手工打码'


@admin.register(催费表类)
class 催费表管理(ImportExportActionModelAdmin):
list_display = ('公司名称','区域','税号','性质','到期日','经办人电话','可收19','可收20','几年','备注')
search_fields = ('公司名称','税号')
list_per_page = 50
# raw_id_fields = ('公司名称',) #显示选项还是新窗口
list_editable = ['备注']
date_hierarchy = '到期日' #时间导航栏
list_filter = ('区域','性质','到期日') #筛选器
list_display_links = ('公司名称',) #点击修改
formfield_overrides = {
models.CharField: {'widget': TextInput(attrs={'size':'20'})},
models.TextField: {'widget': Textarea(attrs={'rows':1, 'cols':50})},
}
def get_actions(self, request):
actions = super(催费表管理,self).get_actions(request)
if request.user.username != 'admin':
del actions['更新到期日和时间']
return actions
@admin.register(可收表类)
class 可收查询表管理(ImportExportActionModelAdmin):
list_display = ('公司名称','区域','可收年份')
search_fields = ('公司名称',)
list_per_page = 50
list_display_links = ('公司名称',) #点击修改
actions = None

@admin.register(可收表19)
class 可收查询表管理(ImportExportActionModelAdmin):
list_display = ('公司名称','区域')
search_fields = ('公司名称',)
list_per_page = 50
list_display_links = ('公司名称',) #点击修改

@admin.register(可收表20)
class 可收查询表管理(ImportExportActionModelAdmin):
list_display = ('公司名称','区域','税号','性质')
search_fields = ('公司名称',)
list_per_page = 50
list_display_links = ('公司名称',) #点击修改



def 更新到期日和时间(modeladmin, request, queryset):


async def 爬(client,body):
def 保存结果(结果,body):
body.到期日 = 结果[0]
body.经办人电话 = 结果[1]
body.save(update_fields=['到期日','经办人电话'])

r = await client.post(url_by_税号,headers=headers, data=json.dumps({'khsbh': body.税号,}),timeout=None)
结果 = 取结果(r.json())
if 结果[0]:
保存结果(结果,body)
else:
用名称查的data = json.dumps({'count':100,'keyword': body.公司名称,'page':0})
r = await client.post(查税号URL,headers=headers, data=用名称查的data,timeout=None)
res_dict = r.json()
if res_dict['obj']:
税号1 = res_dict['obj'][-1]['khsbh']
r1 = await client.post(url_by_税号,headers=headers, data=json.dumps({'khsbh': 税号1,}),timeout=None)
结果1 = 取结果(r1.json())
保存结果(结果1,body)
else:
return None,None

async def 跑():
async with httpx.AsyncClient() as client:
task_list = []
for i in queryset:
req = 爬(client,i)
task = asyncio.create_task(req)
task_list.append(task)
await asyncio.gather(*task_list)
start = time.time()
asyncio.run(跑())
end = time.time()
print(end-start)
print('完成')
def 更新可收年份(modeladmin, request, queryset):
for i in queryset:
if i.到期日:
print(i.公司名称,i.税号)
a = 可收表19年.objects.filter(公司名称__exact = i.公司名称).count()
if a > 0:
i.可收19 = 1
else:
i.可收19 = 0
b = 可收表20年.objects.filter(Q(公司名称__exact = i.公司名称)|Q(税号__exact = i.税号)).count()
if b > 0:
i.可收20 = 1
else:
i.可收20 = 0
# print(i.到期日)
# print(datetime.date.today())
年 = datetime.datetime.now().year
月 = datetime.datetime.now().month
# 日 = datetime.datetime.now().day
新日 = calendar.monthrange(年,月)[1]
print(新日)
# print(datetime.date(年,月,新日)==i.到期日)
if datetime.date(年,月,新日)==i.到期日:
差年= 1
else:
差年 = math.ceil((datetime.date(年,月,新日)-i.到期日)/datetime.timedelta(days=365))
print(差年)
到期日年份 = i.到期日.year
可收字典 = {2015:1,2016:1,2017:1,2018:1,2019:i.可收19,2020:i.可收20,2021:1}
# 年份 = sum(listn[:差年])
j = 0
for i1 in range(到期日年份,到期日年份+差年):
print(i1)
j += 可收字典[i1]
print(j)
i.几年 = j
i.save(update_fields=['可收19','可收20','几年'])

admin.site.add_action(更新到期日和时间)
admin.site.add_action(更新可收年份)

TIPS

asyncio.run()asyncio.create_task()这之类的函数要python3.7以后才能用

评论