valar 1.3.21__tar.gz → 1.3.23__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of valar might be problematic. Click here for more details.
- {valar-1.3.21/src/valar.egg-info → valar-1.3.23}/PKG-INFO +41 -18
- {valar-1.3.21 → valar-1.3.23}/README.md +39 -17
- {valar-1.3.21 → valar-1.3.23}/setup.py +2 -1
- {valar-1.3.21 → valar-1.3.23}/src/valar/dao/orm_dao.py +6 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/models/core.py +2 -1
- {valar-1.3.21 → valar-1.3.23/src/valar.egg-info}/PKG-INFO +41 -18
- {valar-1.3.21 → valar-1.3.23}/src/valar.egg-info/requires.txt +1 -0
- {valar-1.3.21 → valar-1.3.23}/LICENSE +0 -0
- {valar-1.3.21 → valar-1.3.23}/MANIFEST.in +0 -0
- {valar-1.3.21 → valar-1.3.23}/setup.cfg +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/__init__.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/apps.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/auth/Authentication.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/auth/Middleware.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/auth/__init__.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/channels/__init__.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/channels/consumer.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/channels/counter.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/channels/executer.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/channels/mapping.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/channels/sender.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/channels/views.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/classes/__init__.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/classes/app_mixins/__init__.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/classes/app_mixins/auto_migration_mixin.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/classes/app_mixins/auto_urlpatterns_mixin.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/classes/singleton_meta.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/classes/valar_minio.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/classes/valar_response.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/dao/__init__.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/dao/abstract.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/dao/defaults/__init__.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/dao/defaults/field_keys_default.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/dao/defaults/field_values_default.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/dao/defaults/view_defaults.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/dao/engine.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/dao/frame.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/dao/meta.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/dao/mon_dao.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/dao/mon_field.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/dao/orm_field.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/dao/query.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/migrations/0001_initial.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/migrations/__init__.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/models/__init__.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/models/auth.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/models/frame.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/models/indicator.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/models/meta.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/models/test.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/urls.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/views/__init__.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/views/auth.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/views/file.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/views/handler.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/views/meta.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/views/password.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar/views/rest.py +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar.egg-info/SOURCES.txt +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar.egg-info/dependency_links.txt +0 -0
- {valar-1.3.21 → valar-1.3.23}/src/valar.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: valar
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.23
|
|
4
4
|
Summary: valar for morghulis
|
|
5
5
|
Home-page: https://gitee.com/GRIFFIN120/valar_dev
|
|
6
6
|
Author: LYP
|
|
@@ -8,6 +8,7 @@ Author-email: liuyinpeng@buaa.edu.cn
|
|
|
8
8
|
Requires-Python: >=3.9
|
|
9
9
|
Description-Content-Type: text/markdown
|
|
10
10
|
License-File: LICENSE
|
|
11
|
+
Requires-Dist: autobahn==24.4.2
|
|
11
12
|
Requires-Dist: channels==3.0.3
|
|
12
13
|
Requires-Dist: pymongo~=4.11.2
|
|
13
14
|
Requires-Dist: asgiref~=3.8.1
|
|
@@ -45,7 +46,7 @@ pip install valar
|
|
|
45
46
|
- asgi.py
|
|
46
47
|
- urls.py
|
|
47
48
|
|
|
48
|
-
## 2.1 settings.py
|
|
49
|
+
## 2.1 settings.py and ___init__.py
|
|
49
50
|
|
|
50
51
|
```python
|
|
51
52
|
from pathlib import Path
|
|
@@ -61,8 +62,16 @@ SECRET_KEY = 'django-insecure-of@tfouoq^_f$l!yki#m=6j7)@&kjri$1_$!mca-=%7=+@f@5^
|
|
|
61
62
|
|
|
62
63
|
DATABASES = {
|
|
63
64
|
'default': {
|
|
64
|
-
'ENGINE': 'django.db.backends.
|
|
65
|
-
'NAME':
|
|
65
|
+
'ENGINE': 'django.db.backends.mysql', # 使用 MySQL
|
|
66
|
+
'NAME': 'vm_ets', # 数据库名
|
|
67
|
+
'USER': 'root', # 用户名
|
|
68
|
+
'PASSWORD': password, # 密码
|
|
69
|
+
'HOST': 'localhost', # 数据库地址,本机用127.0.0.1
|
|
70
|
+
'PORT': '3306', # MySQL端口,默认3306
|
|
71
|
+
'OPTIONS': {
|
|
72
|
+
'connect_timeout': 5, # 默认10秒,可以缩短
|
|
73
|
+
'charset': 'utf8mb4',
|
|
74
|
+
}
|
|
66
75
|
}
|
|
67
76
|
}
|
|
68
77
|
|
|
@@ -105,44 +114,58 @@ DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
|
|
|
105
114
|
""" Valar Options """
|
|
106
115
|
|
|
107
116
|
HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
|
|
108
|
-
MONGO_URI = 'mongodb://
|
|
109
|
-
MINIO_URL = "s3://
|
|
110
|
-
MINIO_ROOT = "
|
|
117
|
+
MONGO_URI = f'mongodb://root:{password}@{host}:27017/'
|
|
118
|
+
MINIO_URL = f"s3://admin:{password}@{host}:9001"
|
|
119
|
+
MINIO_ROOT = f"http://{host}:9001"
|
|
111
120
|
|
|
112
121
|
""" Email Options """
|
|
122
|
+
|
|
113
123
|
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
|
114
|
-
EMAIL_HOST = '
|
|
115
|
-
EMAIL_PORT =
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
124
|
+
EMAIL_HOST = 'smtp.126.com'
|
|
125
|
+
EMAIL_PORT = 25
|
|
126
|
+
EMAIL_HOST_USER = "xxxx@126.com"
|
|
127
|
+
EMAIL_HOST_PASSWORD = 'CGiKQh5FyQyupQYA'
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
```python
|
|
131
|
+
import pymysql
|
|
132
|
+
|
|
133
|
+
pymysql.install_as_MySQLdb()
|
|
134
|
+
|
|
121
135
|
```
|
|
122
136
|
|
|
123
137
|
## 2.2 asgi.py
|
|
124
138
|
|
|
125
139
|
```python
|
|
140
|
+
import os
|
|
141
|
+
from pathlib import Path
|
|
142
|
+
|
|
126
143
|
from django.core.asgi import get_asgi_application
|
|
127
144
|
from channels.routing import ProtocolTypeRouter, URLRouter
|
|
128
145
|
from django.urls import re_path
|
|
129
146
|
|
|
130
147
|
from valar.channels.consumer import ValarConsumer
|
|
131
148
|
|
|
149
|
+
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '%s.settings' % Path(__file__).resolve().parent.parent.name)
|
|
132
150
|
application = ProtocolTypeRouter({
|
|
133
151
|
'http': get_asgi_application(),
|
|
134
152
|
'websocket': URLRouter([
|
|
135
153
|
re_path(r'(?P<client>\w+)/$', ValarConsumer.as_asgi()),
|
|
136
154
|
])
|
|
137
155
|
})
|
|
138
|
-
|
|
139
|
-
|
|
140
156
|
```
|
|
141
157
|
|
|
142
158
|
## 2.3 urls.py
|
|
143
159
|
|
|
144
|
-
|
|
145
|
-
|
|
160
|
+
```python
|
|
161
|
+
from django.urls import path, include
|
|
162
|
+
|
|
163
|
+
urlpatterns = [
|
|
164
|
+
path('valar/', include('valar.urls')),
|
|
165
|
+
]
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
|
|
146
169
|
- go to section 4 to see how to register channel handlers (a Vue - Django async communication tool) in urls.
|
|
147
170
|
|
|
148
171
|
# 3. migrate
|
|
@@ -15,7 +15,7 @@ pip install valar
|
|
|
15
15
|
- asgi.py
|
|
16
16
|
- urls.py
|
|
17
17
|
|
|
18
|
-
## 2.1 settings.py
|
|
18
|
+
## 2.1 settings.py and ___init__.py
|
|
19
19
|
|
|
20
20
|
```python
|
|
21
21
|
from pathlib import Path
|
|
@@ -31,8 +31,16 @@ SECRET_KEY = 'django-insecure-of@tfouoq^_f$l!yki#m=6j7)@&kjri$1_$!mca-=%7=+@f@5^
|
|
|
31
31
|
|
|
32
32
|
DATABASES = {
|
|
33
33
|
'default': {
|
|
34
|
-
'ENGINE': 'django.db.backends.
|
|
35
|
-
'NAME':
|
|
34
|
+
'ENGINE': 'django.db.backends.mysql', # 使用 MySQL
|
|
35
|
+
'NAME': 'vm_ets', # 数据库名
|
|
36
|
+
'USER': 'root', # 用户名
|
|
37
|
+
'PASSWORD': password, # 密码
|
|
38
|
+
'HOST': 'localhost', # 数据库地址,本机用127.0.0.1
|
|
39
|
+
'PORT': '3306', # MySQL端口,默认3306
|
|
40
|
+
'OPTIONS': {
|
|
41
|
+
'connect_timeout': 5, # 默认10秒,可以缩短
|
|
42
|
+
'charset': 'utf8mb4',
|
|
43
|
+
}
|
|
36
44
|
}
|
|
37
45
|
}
|
|
38
46
|
|
|
@@ -75,44 +83,58 @@ DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
|
|
|
75
83
|
""" Valar Options """
|
|
76
84
|
|
|
77
85
|
HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
|
|
78
|
-
MONGO_URI = 'mongodb://
|
|
79
|
-
MINIO_URL = "s3://
|
|
80
|
-
MINIO_ROOT = "
|
|
86
|
+
MONGO_URI = f'mongodb://root:{password}@{host}:27017/'
|
|
87
|
+
MINIO_URL = f"s3://admin:{password}@{host}:9001"
|
|
88
|
+
MINIO_ROOT = f"http://{host}:9001"
|
|
81
89
|
|
|
82
90
|
""" Email Options """
|
|
91
|
+
|
|
83
92
|
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
|
84
|
-
EMAIL_HOST = '
|
|
85
|
-
EMAIL_PORT =
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
93
|
+
EMAIL_HOST = 'smtp.126.com'
|
|
94
|
+
EMAIL_PORT = 25
|
|
95
|
+
EMAIL_HOST_USER = "xxxx@126.com"
|
|
96
|
+
EMAIL_HOST_PASSWORD = 'CGiKQh5FyQyupQYA'
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
```python
|
|
100
|
+
import pymysql
|
|
101
|
+
|
|
102
|
+
pymysql.install_as_MySQLdb()
|
|
103
|
+
|
|
91
104
|
```
|
|
92
105
|
|
|
93
106
|
## 2.2 asgi.py
|
|
94
107
|
|
|
95
108
|
```python
|
|
109
|
+
import os
|
|
110
|
+
from pathlib import Path
|
|
111
|
+
|
|
96
112
|
from django.core.asgi import get_asgi_application
|
|
97
113
|
from channels.routing import ProtocolTypeRouter, URLRouter
|
|
98
114
|
from django.urls import re_path
|
|
99
115
|
|
|
100
116
|
from valar.channels.consumer import ValarConsumer
|
|
101
117
|
|
|
118
|
+
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '%s.settings' % Path(__file__).resolve().parent.parent.name)
|
|
102
119
|
application = ProtocolTypeRouter({
|
|
103
120
|
'http': get_asgi_application(),
|
|
104
121
|
'websocket': URLRouter([
|
|
105
122
|
re_path(r'(?P<client>\w+)/$', ValarConsumer.as_asgi()),
|
|
106
123
|
])
|
|
107
124
|
})
|
|
108
|
-
|
|
109
|
-
|
|
110
125
|
```
|
|
111
126
|
|
|
112
127
|
## 2.3 urls.py
|
|
113
128
|
|
|
114
|
-
|
|
115
|
-
|
|
129
|
+
```python
|
|
130
|
+
from django.urls import path, include
|
|
131
|
+
|
|
132
|
+
urlpatterns = [
|
|
133
|
+
path('valar/', include('valar.urls')),
|
|
134
|
+
]
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
|
|
116
138
|
- go to section 4 to see how to register channel handlers (a Vue - Django async communication tool) in urls.
|
|
117
139
|
|
|
118
140
|
# 3. migrate
|
|
@@ -7,9 +7,10 @@ from typing import Dict, Type
|
|
|
7
7
|
with open("README.md", "r", encoding="utf-8") as f:
|
|
8
8
|
long_description = f.read()
|
|
9
9
|
|
|
10
|
-
version = "1.3.
|
|
10
|
+
version = "1.3.23"
|
|
11
11
|
|
|
12
12
|
requires = [
|
|
13
|
+
'autobahn==24.4.2',
|
|
13
14
|
'channels==3.0.3',
|
|
14
15
|
'pymongo~=4.11.2',
|
|
15
16
|
'asgiref~=3.8.1',
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import datetime
|
|
2
2
|
import json
|
|
3
|
+
from urllib.parse import quote
|
|
3
4
|
|
|
4
5
|
from django.core.paginator import Paginator
|
|
5
6
|
from django.db.models.options import Options
|
|
@@ -317,6 +318,7 @@ def __get_custom_props__(entity, code='default'):
|
|
|
317
318
|
def __set_simple_values__(fields, values):
|
|
318
319
|
date_props_mapping = {}
|
|
319
320
|
json_props = []
|
|
321
|
+
file_props = []
|
|
320
322
|
for field in fields:
|
|
321
323
|
if isinstance(field, OrmField):
|
|
322
324
|
prop = field.prop
|
|
@@ -328,12 +330,16 @@ def __set_simple_values__(fields, values):
|
|
|
328
330
|
date_props_mapping[prop] = __data_props_formatting__[domain]
|
|
329
331
|
elif domain == 'JSONField':
|
|
330
332
|
json_props.append(prop)
|
|
333
|
+
elif domain == 'FileField':
|
|
334
|
+
file_props.append(prop)
|
|
331
335
|
for row in values:
|
|
332
336
|
for prop, formating in date_props_mapping.items():
|
|
333
337
|
if row.get(prop):
|
|
334
338
|
row[prop] = row[prop].strftime(formating)
|
|
335
339
|
for prop in json_props:
|
|
336
340
|
row[prop] = json.loads(row[prop]) if type(row[prop]) is str else row[prop]
|
|
341
|
+
for prop in file_props:
|
|
342
|
+
row[prop] = quote(row[prop], safe=":/")
|
|
337
343
|
|
|
338
344
|
# def fun(field): return type(field).__name__ not in __referred_domains__ and field.name not in __omit_field_props__
|
|
339
345
|
#
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import json
|
|
2
|
+
from urllib.parse import quote
|
|
2
3
|
|
|
3
4
|
from django.apps import AppConfig
|
|
4
5
|
from django.db import models
|
|
@@ -48,7 +49,7 @@ class VModel(models.Model):
|
|
|
48
49
|
elif domain in [TimeField]:
|
|
49
50
|
value = value.strftime('%H:%M:%S')
|
|
50
51
|
elif domain in [FileField]:
|
|
51
|
-
value = value.name
|
|
52
|
+
value = quote(value.name, safe=":/")
|
|
52
53
|
elif domain in [BigAutoField]:
|
|
53
54
|
value = value
|
|
54
55
|
data[prop] = value
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: valar
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.23
|
|
4
4
|
Summary: valar for morghulis
|
|
5
5
|
Home-page: https://gitee.com/GRIFFIN120/valar_dev
|
|
6
6
|
Author: LYP
|
|
@@ -8,6 +8,7 @@ Author-email: liuyinpeng@buaa.edu.cn
|
|
|
8
8
|
Requires-Python: >=3.9
|
|
9
9
|
Description-Content-Type: text/markdown
|
|
10
10
|
License-File: LICENSE
|
|
11
|
+
Requires-Dist: autobahn==24.4.2
|
|
11
12
|
Requires-Dist: channels==3.0.3
|
|
12
13
|
Requires-Dist: pymongo~=4.11.2
|
|
13
14
|
Requires-Dist: asgiref~=3.8.1
|
|
@@ -45,7 +46,7 @@ pip install valar
|
|
|
45
46
|
- asgi.py
|
|
46
47
|
- urls.py
|
|
47
48
|
|
|
48
|
-
## 2.1 settings.py
|
|
49
|
+
## 2.1 settings.py and ___init__.py
|
|
49
50
|
|
|
50
51
|
```python
|
|
51
52
|
from pathlib import Path
|
|
@@ -61,8 +62,16 @@ SECRET_KEY = 'django-insecure-of@tfouoq^_f$l!yki#m=6j7)@&kjri$1_$!mca-=%7=+@f@5^
|
|
|
61
62
|
|
|
62
63
|
DATABASES = {
|
|
63
64
|
'default': {
|
|
64
|
-
'ENGINE': 'django.db.backends.
|
|
65
|
-
'NAME':
|
|
65
|
+
'ENGINE': 'django.db.backends.mysql', # 使用 MySQL
|
|
66
|
+
'NAME': 'vm_ets', # 数据库名
|
|
67
|
+
'USER': 'root', # 用户名
|
|
68
|
+
'PASSWORD': password, # 密码
|
|
69
|
+
'HOST': 'localhost', # 数据库地址,本机用127.0.0.1
|
|
70
|
+
'PORT': '3306', # MySQL端口,默认3306
|
|
71
|
+
'OPTIONS': {
|
|
72
|
+
'connect_timeout': 5, # 默认10秒,可以缩短
|
|
73
|
+
'charset': 'utf8mb4',
|
|
74
|
+
}
|
|
66
75
|
}
|
|
67
76
|
}
|
|
68
77
|
|
|
@@ -105,44 +114,58 @@ DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
|
|
|
105
114
|
""" Valar Options """
|
|
106
115
|
|
|
107
116
|
HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
|
|
108
|
-
MONGO_URI = 'mongodb://
|
|
109
|
-
MINIO_URL = "s3://
|
|
110
|
-
MINIO_ROOT = "
|
|
117
|
+
MONGO_URI = f'mongodb://root:{password}@{host}:27017/'
|
|
118
|
+
MINIO_URL = f"s3://admin:{password}@{host}:9001"
|
|
119
|
+
MINIO_ROOT = f"http://{host}:9001"
|
|
111
120
|
|
|
112
121
|
""" Email Options """
|
|
122
|
+
|
|
113
123
|
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
|
114
|
-
EMAIL_HOST = '
|
|
115
|
-
EMAIL_PORT =
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
124
|
+
EMAIL_HOST = 'smtp.126.com'
|
|
125
|
+
EMAIL_PORT = 25
|
|
126
|
+
EMAIL_HOST_USER = "xxxx@126.com"
|
|
127
|
+
EMAIL_HOST_PASSWORD = 'CGiKQh5FyQyupQYA'
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
```python
|
|
131
|
+
import pymysql
|
|
132
|
+
|
|
133
|
+
pymysql.install_as_MySQLdb()
|
|
134
|
+
|
|
121
135
|
```
|
|
122
136
|
|
|
123
137
|
## 2.2 asgi.py
|
|
124
138
|
|
|
125
139
|
```python
|
|
140
|
+
import os
|
|
141
|
+
from pathlib import Path
|
|
142
|
+
|
|
126
143
|
from django.core.asgi import get_asgi_application
|
|
127
144
|
from channels.routing import ProtocolTypeRouter, URLRouter
|
|
128
145
|
from django.urls import re_path
|
|
129
146
|
|
|
130
147
|
from valar.channels.consumer import ValarConsumer
|
|
131
148
|
|
|
149
|
+
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '%s.settings' % Path(__file__).resolve().parent.parent.name)
|
|
132
150
|
application = ProtocolTypeRouter({
|
|
133
151
|
'http': get_asgi_application(),
|
|
134
152
|
'websocket': URLRouter([
|
|
135
153
|
re_path(r'(?P<client>\w+)/$', ValarConsumer.as_asgi()),
|
|
136
154
|
])
|
|
137
155
|
})
|
|
138
|
-
|
|
139
|
-
|
|
140
156
|
```
|
|
141
157
|
|
|
142
158
|
## 2.3 urls.py
|
|
143
159
|
|
|
144
|
-
|
|
145
|
-
|
|
160
|
+
```python
|
|
161
|
+
from django.urls import path, include
|
|
162
|
+
|
|
163
|
+
urlpatterns = [
|
|
164
|
+
path('valar/', include('valar.urls')),
|
|
165
|
+
]
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
|
|
146
169
|
- go to section 4 to see how to register channel handlers (a Vue - Django async communication tool) in urls.
|
|
147
170
|
|
|
148
171
|
# 3. migrate
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|