valar 1.3.22__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.22/src/valar.egg-info → valar-1.3.23}/PKG-INFO +40 -18
- {valar-1.3.22 → valar-1.3.23}/README.md +39 -17
- {valar-1.3.22 → valar-1.3.23}/setup.py +1 -1
- {valar-1.3.22 → valar-1.3.23}/src/valar/dao/orm_dao.py +6 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/models/core.py +2 -1
- {valar-1.3.22 → valar-1.3.23/src/valar.egg-info}/PKG-INFO +40 -18
- {valar-1.3.22 → valar-1.3.23}/LICENSE +0 -0
- {valar-1.3.22 → valar-1.3.23}/MANIFEST.in +0 -0
- {valar-1.3.22 → valar-1.3.23}/setup.cfg +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/__init__.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/apps.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/auth/Authentication.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/auth/Middleware.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/auth/__init__.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/channels/__init__.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/channels/consumer.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/channels/counter.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/channels/executer.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/channels/mapping.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/channels/sender.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/channels/views.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/classes/__init__.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/classes/app_mixins/__init__.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/classes/app_mixins/auto_migration_mixin.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/classes/app_mixins/auto_urlpatterns_mixin.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/classes/singleton_meta.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/classes/valar_minio.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/classes/valar_response.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/dao/__init__.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/dao/abstract.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/dao/defaults/__init__.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/dao/defaults/field_keys_default.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/dao/defaults/field_values_default.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/dao/defaults/view_defaults.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/dao/engine.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/dao/frame.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/dao/meta.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/dao/mon_dao.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/dao/mon_field.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/dao/orm_field.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/dao/query.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/migrations/0001_initial.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/migrations/__init__.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/models/__init__.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/models/auth.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/models/frame.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/models/indicator.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/models/meta.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/models/test.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/urls.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/views/__init__.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/views/auth.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/views/file.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/views/handler.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/views/meta.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/views/password.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar/views/rest.py +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar.egg-info/SOURCES.txt +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar.egg-info/dependency_links.txt +0 -0
- {valar-1.3.22 → valar-1.3.23}/src/valar.egg-info/requires.txt +0 -0
- {valar-1.3.22 → 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
|
|
@@ -46,7 +46,7 @@ pip install valar
|
|
|
46
46
|
- asgi.py
|
|
47
47
|
- urls.py
|
|
48
48
|
|
|
49
|
-
## 2.1 settings.py
|
|
49
|
+
## 2.1 settings.py and ___init__.py
|
|
50
50
|
|
|
51
51
|
```python
|
|
52
52
|
from pathlib import Path
|
|
@@ -62,8 +62,16 @@ SECRET_KEY = 'django-insecure-of@tfouoq^_f$l!yki#m=6j7)@&kjri$1_$!mca-=%7=+@f@5^
|
|
|
62
62
|
|
|
63
63
|
DATABASES = {
|
|
64
64
|
'default': {
|
|
65
|
-
'ENGINE': 'django.db.backends.
|
|
66
|
-
'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
|
+
}
|
|
67
75
|
}
|
|
68
76
|
}
|
|
69
77
|
|
|
@@ -106,44 +114,58 @@ DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
|
|
|
106
114
|
""" Valar Options """
|
|
107
115
|
|
|
108
116
|
HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
|
|
109
|
-
MONGO_URI = 'mongodb://
|
|
110
|
-
MINIO_URL = "s3://
|
|
111
|
-
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"
|
|
112
120
|
|
|
113
121
|
""" Email Options """
|
|
122
|
+
|
|
114
123
|
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
|
115
|
-
EMAIL_HOST = '
|
|
116
|
-
EMAIL_PORT =
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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
|
+
|
|
122
135
|
```
|
|
123
136
|
|
|
124
137
|
## 2.2 asgi.py
|
|
125
138
|
|
|
126
139
|
```python
|
|
140
|
+
import os
|
|
141
|
+
from pathlib import Path
|
|
142
|
+
|
|
127
143
|
from django.core.asgi import get_asgi_application
|
|
128
144
|
from channels.routing import ProtocolTypeRouter, URLRouter
|
|
129
145
|
from django.urls import re_path
|
|
130
146
|
|
|
131
147
|
from valar.channels.consumer import ValarConsumer
|
|
132
148
|
|
|
149
|
+
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '%s.settings' % Path(__file__).resolve().parent.parent.name)
|
|
133
150
|
application = ProtocolTypeRouter({
|
|
134
151
|
'http': get_asgi_application(),
|
|
135
152
|
'websocket': URLRouter([
|
|
136
153
|
re_path(r'(?P<client>\w+)/$', ValarConsumer.as_asgi()),
|
|
137
154
|
])
|
|
138
155
|
})
|
|
139
|
-
|
|
140
|
-
|
|
141
156
|
```
|
|
142
157
|
|
|
143
158
|
## 2.3 urls.py
|
|
144
159
|
|
|
145
|
-
|
|
146
|
-
|
|
160
|
+
```python
|
|
161
|
+
from django.urls import path, include
|
|
162
|
+
|
|
163
|
+
urlpatterns = [
|
|
164
|
+
path('valar/', include('valar.urls')),
|
|
165
|
+
]
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
|
|
147
169
|
- go to section 4 to see how to register channel handlers (a Vue - Django async communication tool) in urls.
|
|
148
170
|
|
|
149
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
|
|
@@ -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
|
|
@@ -46,7 +46,7 @@ pip install valar
|
|
|
46
46
|
- asgi.py
|
|
47
47
|
- urls.py
|
|
48
48
|
|
|
49
|
-
## 2.1 settings.py
|
|
49
|
+
## 2.1 settings.py and ___init__.py
|
|
50
50
|
|
|
51
51
|
```python
|
|
52
52
|
from pathlib import Path
|
|
@@ -62,8 +62,16 @@ SECRET_KEY = 'django-insecure-of@tfouoq^_f$l!yki#m=6j7)@&kjri$1_$!mca-=%7=+@f@5^
|
|
|
62
62
|
|
|
63
63
|
DATABASES = {
|
|
64
64
|
'default': {
|
|
65
|
-
'ENGINE': 'django.db.backends.
|
|
66
|
-
'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
|
+
}
|
|
67
75
|
}
|
|
68
76
|
}
|
|
69
77
|
|
|
@@ -106,44 +114,58 @@ DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
|
|
|
106
114
|
""" Valar Options """
|
|
107
115
|
|
|
108
116
|
HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
|
|
109
|
-
MONGO_URI = 'mongodb://
|
|
110
|
-
MINIO_URL = "s3://
|
|
111
|
-
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"
|
|
112
120
|
|
|
113
121
|
""" Email Options """
|
|
122
|
+
|
|
114
123
|
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
|
115
|
-
EMAIL_HOST = '
|
|
116
|
-
EMAIL_PORT =
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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
|
+
|
|
122
135
|
```
|
|
123
136
|
|
|
124
137
|
## 2.2 asgi.py
|
|
125
138
|
|
|
126
139
|
```python
|
|
140
|
+
import os
|
|
141
|
+
from pathlib import Path
|
|
142
|
+
|
|
127
143
|
from django.core.asgi import get_asgi_application
|
|
128
144
|
from channels.routing import ProtocolTypeRouter, URLRouter
|
|
129
145
|
from django.urls import re_path
|
|
130
146
|
|
|
131
147
|
from valar.channels.consumer import ValarConsumer
|
|
132
148
|
|
|
149
|
+
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '%s.settings' % Path(__file__).resolve().parent.parent.name)
|
|
133
150
|
application = ProtocolTypeRouter({
|
|
134
151
|
'http': get_asgi_application(),
|
|
135
152
|
'websocket': URLRouter([
|
|
136
153
|
re_path(r'(?P<client>\w+)/$', ValarConsumer.as_asgi()),
|
|
137
154
|
])
|
|
138
155
|
})
|
|
139
|
-
|
|
140
|
-
|
|
141
156
|
```
|
|
142
157
|
|
|
143
158
|
## 2.3 urls.py
|
|
144
159
|
|
|
145
|
-
|
|
146
|
-
|
|
160
|
+
```python
|
|
161
|
+
from django.urls import path, include
|
|
162
|
+
|
|
163
|
+
urlpatterns = [
|
|
164
|
+
path('valar/', include('valar.urls')),
|
|
165
|
+
]
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
|
|
147
169
|
- go to section 4 to see how to register channel handlers (a Vue - Django async communication tool) in urls.
|
|
148
170
|
|
|
149
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
|
|
File without changes
|