首页 > 其他 > 详细

Django-3

时间:2019-07-28 17:04:07      阅读:49      评论:0      收藏:0      [点我收藏+]

 Django-3

 

一、创建数据库
mysql> CREATE DATABASE `devops` /*!40100 DEFAULT CHARACTER SET utf8 */;
Query OK, 1 row affected (0.01 sec)

创建不同版本的django
https://www.zhangshengrong.com/p/w4N7B05jar/


Django 1.11
启动报错:https://www.cnblogs.com/yanlin-10/p/9714793.html

安装pip install mysqlclient

 

(venv) D:\PycharmProjects\myenv\ops>python manage.py showmigrations
admin
[ ] 0001_initial
[ ] 0002_logentry_remove_auto_add
auth
[ ] 0001_initial
[ ] 0002_alter_permission_name_max_length
[ ] 0003_alter_user_email_max_length
[ ] 0004_alter_user_username_opts
[ ] 0005_alter_user_last_login_null
[ ] 0006_require_contenttypes_0002
[ ] 0007_alter_validators_add_error_messages
[ ] 0008_alter_user_username_max_length
contenttypes
[ ] 0001_initial
[ ] 0002_remove_content_type_name
idcs
(no migrations)
sessions
[ ] 0001_initial

(venv) D:\PycharmProjects\myenv\ops>python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying sessions.0001_initial... OK

(venv) D:\PycharmProjects\myenv\ops>python manage.py showmigrations
admin
[X] 0001_initial
[X] 0002_logentry_remove_auto_add
auth
[X] 0001_initial
[X] 0002_alter_permission_name_max_length
[X] 0003_alter_user_email_max_length
[X] 0004_alter_user_username_opts
[X] 0005_alter_user_last_login_null
[X] 0006_require_contenttypes_0002
[X] 0007_alter_validators_add_error_messages
[X] 0008_alter_user_username_max_length
contenttypes
[X] 0001_initial
[X] 0002_remove_content_type_name
idcs
(no migrations)
sessions
[X] 0001_initial

(venv) D:\PycharmProjects\myenv\ops>python manage.py makemigrations idcs
Migrations for ‘idcs‘:
apps\idcs\migrations\0001_initial.py
- Create model Idc

(venv) D:\PycharmProjects\myenv\ops>python manage.py showmigrations
admin
[X] 0001_initial
[X] 0002_logentry_remove_auto_add
auth
[X] 0001_initial
[X] 0002_alter_permission_name_max_length
[X] 0003_alter_user_email_max_length
[X] 0004_alter_user_username_opts
[X] 0005_alter_user_last_login_null
[X] 0006_require_contenttypes_0002
[X] 0007_alter_validators_add_error_messages
[X] 0008_alter_user_username_max_length
contenttypes
[X] 0001_initial
[X] 0002_remove_content_type_name
idcs
[ ] 0001_initial
sessions
[X] 0001_initial

同步好表结构:

(venv) D:\PycharmProjects\myenv\ops>python manage.py migrate idcs
Operations to perform:
Apply all migrations: idcs
Running migrations:
Applying idcs.0001_initial... OK

(venv) D:\PycharmProjects\myenv\ops>
同步好表结构

怎样序列化模型

1,模型添加两条数据
(venv) D:\PycharmProjects\myenv\ops>python manage.py shell
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)

>>> from idcs.models import Idc
>>> idc = Idc()
>>> idc.name = "子镇机房"
>>> idc.address = "山西子镇机房"
>>> idc.phone = "12345678"
>>> idc.email = "weizi@163.com"
>>> idc.letter = "zz"
>>> idc.save()
>>>
>>> idc.id = None
>>> idc.name = "潞城机房"
>>> idc.address = "山西潞城机房"
>>> idc.letter = "lc"
>>> idc.save()
>>>
>>> Idc.objects.all()
<QuerySet [<Idc: 子镇机房>, <Idc: 潞城机房>]>
>>>
>>> from idcs.serializers import IdcSerializer
>>> idc = Idc.objects.get(pk=1)
>>> idc
<Idc: 子镇机房>
>>>
>>> serializer = IdcSerializer(idc)
>>> serializer
IdcSerializer(<Idc: 子镇机房>):
id = IntegerField()
name = CharField()
address = CharField()
phone = CharField()
email = EmailField()
letter = CharField()

>>> serializer.data
{‘id‘: 1, ‘name‘: ‘子镇机房‘, ‘address‘: ‘山西子镇机房‘, ‘phone‘: ‘12345678‘, ‘email‘: ‘weizi@163.com‘, ‘letter‘: ‘zz‘}
>>>
>>> type(a)
<class ‘rest_framework.utils.serializer_helpers.ReturnDict‘>
不建议用
>>> import json
>>> json.dumps(serializer.data)
‘{"id": 1, "name": "\\u5b50\\u9547\\u673a\\u623f", "address": "\\u5c71\\u897f\\u5b50\\u9547\\u673a\\u623f", "phone": "12345678", "
email": "weizi@163.com", "letter": "zz"}‘

建议使用

>>> from rest_framework.renderers import JSONRenderer
>>> help(JSONRenderer)
Help on class JSONRenderer in module rest_framework.renderers:

class JSONRenderer(BaseRenderer)
| Renderer which serializes to JSON.
|
| Method resolution order:
| JSONRenderer
| BaseRenderer
| builtins.object
|
| Methods defined here:
|
| get_indent(self, accepted_media_type, renderer_context)
|
| render(self, data, accepted_media_type=None, renderer_context=None)
| Render `data` into JSON, returning a bytestring.
|
| ----------------------------------------------------------------------
| Data and other attributes defined here:
|
| charset = None
|
| compact = True
|
| encoder_class = <class ‘rest_framework.utils.encoders.JSONEncoder‘>
| JSONEncoder subclass that knows how to encode date/time/timedelta,
| decimal types, generators and other basic python objects.
|
| ensure_ascii = False
|
| format = ‘json‘

>>>
>>> jr = JSONRenderer()
>>> jr.render(serializer.data) #返回前端的json数据
b‘{"id":1,"name":"\xe5\xad\x90\xe9\x95\x87\xe6\x9c\xba\xe6\x88\xbf","address":"\xe5\xb1\xb1\xe8\xa5\xbf\xe5\xad\x90\xe9\x95\x87\xe
6\x9c\xba\xe6\x88\xbf","phone":"12345678","email":"weizi@163.com","letter":"zz"}‘
>>>
用httpresponse对象返回,

 

获取数据步骤:
1,mysql
2,queryset = Idc.objects.all()
3,json.dumps() ===》 序列化
4,HttpResponse()

 

反序列化,

类型是BytesIO
假设浏览器写数据到服务器
>>> content
b‘{"id":1,"name":"\xe5\xad\x90\xe9\x95\x87\xe6\x9c\xba\xe6\x88\xbf","address":"\xe5\xb1\xb1\xe8\xa5\xbf\xe5\xad\x90\xe9\x95\x87\xe
6\x9c\xba\xe6\x88\xbf","phone":"12345678","email":"weizi@163.com","letter":"zz"}‘
>>>
>>> from django.utils.six import BytesIO
>>> stream = BytesIO(content)
>>> stream
<_io.BytesIO object at 0x0000000004341518>
>>>

>>> dir(stream)
[‘__class__‘, ‘__del__‘, ‘__delattr__‘, ‘__dict__‘, ‘__dir__‘, ‘__doc__‘, ‘__enter__‘, ‘__eq__‘, ‘__exit__‘, ‘__format__‘, ‘__ge__
‘, ‘__getattribute__‘, ‘__getstate__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__iter__‘, ‘__le__‘, ‘__lt__‘, ‘__n
e__‘, ‘__new__‘, ‘__next__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__setattr__‘, ‘__setstate__‘, ‘__sizeof__‘, ‘__str__‘, ‘_
_subclasshook__‘, ‘_checkClosed‘, ‘_checkReadable‘, ‘_checkSeekable‘, ‘_checkWritable‘, ‘close‘, ‘closed‘, ‘detach‘, ‘fileno‘, ‘fl
ush‘, ‘getbuffer‘, ‘getvalue‘, ‘isatty‘, ‘read‘, ‘read1‘, ‘readable‘, ‘readinto‘, ‘readinto1‘, ‘readline‘, ‘readlines‘, ‘seek‘, ‘s
eekable‘, ‘tell‘, ‘truncate‘, ‘writable‘, ‘write‘, ‘writelines‘]
>>> stream.read()
b‘{"id":1,"name":"\xe5\xad\x90\xe9\x95\x87\xe6\x9c\xba\xe6\x88\xbf","address":"\xe5\xb1\xb1\xe8\xa5\xbf\xe5\xad\x90\xe9\x95\x87\xe
6\x9c\xba\xe6\x88\xbf","phone":"12345678","email":"weizi@163.com","letter":"zz"}‘
>>>
>>> from rest_framework.parsers import JSONParser
>>> from rest_framework.parsers import JSONParser
>>>
>>>
>>> content
b‘{"id":1,"name":"\xe5\xad\x90\xe9\x95\x87\xe6\x9c\xba\xe6\x88\xbf","address":"\xe5\xb1\xb1\xe8\xa5\xbf\xe5\xad\x90\xe9\x95\x87\xe
6\x9c\xba\xe6\x88\xbf","phone":"12345678","email":"weizi@163.com","letter":"zz"}‘
>>> stream = BytesIO(content)
>>> data = JSONParser().parse(stream)
>>> data #标准的JSON格式
{‘id‘: 1, ‘name‘: ‘子镇机房‘, ‘address‘: ‘山西子镇机房‘, ‘phone‘: ‘12345678‘, ‘email‘: ‘weizi@163.com‘, ‘letter‘: ‘zz‘}
>>> type(data)
<class ‘dict‘>
>>>
>>> serializer = IdcSerializer(data=data)
>>> serializer
IdcSerializer(data={‘id‘: 1, ‘name‘: ‘子镇机房‘, ‘address‘: ‘山西子镇机房‘, ‘phone‘: ‘12345678‘, ‘email‘: ‘weizi@163.com‘, ‘letter
‘: ‘zz‘}):
id = IntegerField()
name = CharField()
address = CharField()
phone = CharField()
email = EmailField()
letter = CharField() #规则未生效退出重新搞
>>>
(venv) D:\PycharmProjects\myenv\ops>python manage.py shell
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from idcs.serializers import IdcSerializer
>>> data = {‘id‘: 1, ‘name‘: ‘子镇机房‘, ‘address‘: ‘山西子镇机房‘, ‘phone‘: ‘12345678‘, ‘email‘: ‘weizi@163.com‘, ‘letter‘: ‘zz‘}

>>> serializer = IdcSeralizer(data=data)
Traceback (most recent call last):
File "<console>", line 1, in <module>
NameError: name ‘IdcSeralizer‘ is not defined
>>> serializer = IdcSerializer(data=data)
>>> serializer
IdcSerializer(data={‘id‘: 1, ‘name‘: ‘子镇机房‘, ‘address‘: ‘山西子镇机房‘, ‘phone‘: ‘12345678‘, ‘email‘: ‘weizi@163.com‘, ‘letter
‘: ‘zz‘}):
id = IntegerField(read_only=True)
name = CharField(max_length=32, required=True)
address = CharField(max_length=256, required=True)
phone = CharField(max_length=15, required=True)
email = EmailField(required=True)
letter = CharField(max_length=5, required=True) #规则生效
>>>


验证成功返回True
>>> serializer.is_valid()
True


拿到干净的数据
>>> serializer.validated_data
OrderedDict([(‘name‘, ‘子镇机房‘), (‘address‘, ‘山西子镇机房‘), (‘phone‘, ‘12345678‘), (‘email‘, ‘weizi@163.com‘), (‘letter‘, ‘zz‘
)])

做操作

Serializers.py
classIdcSerializer(serializers.Serializer):
  """
  Idc序列化类
  """
  id=serializers.IntegerField(read_only=True)
  name=serializers.CharField(required=True,max_length=32)
  address=serializers.CharField(required=True,max_length=256)
  phone=serializers.CharField(required=True,max_length=15)
  email=serializers.EmailField(required=True)
  letter=serializers.CharField(required=True,max_length=5)

  defcreate(self,validated_data):
  returnIdc.objects.create(**validated_data)


(venv) D:\PycharmProjects\myenv\ops>python manage.py shell
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from idcs.serializers import IdcSerializer
>>> data = {‘id‘: 1, ‘name‘: ‘子镇机房‘, ‘address‘: ‘山西子镇机房‘, ‘phone‘: ‘12345678‘, ‘email‘: ‘weizi@163.com‘, ‘letter‘: ‘zz‘}

>>> del data[‘id‘]
>>> data
{‘name‘: ‘子镇机房‘, ‘address‘: ‘山西子镇机房‘, ‘phone‘: ‘12345678‘, ‘email‘: ‘weizi@163.com‘, ‘letter‘: ‘zz‘}
>>> serializer = IdcSerializer(data=data)
>>> serializer.is_valid()
True
>>> serializer.save()
<Idc: 子镇机房>
>>>
>>> from idcs.models import Idc
>>> Idc.objects.all()
<QuerySet [<Idc: 子镇机房>, <Idc: 潞城机房>, <Idc: 子镇机房>, <Idc: 子镇机房>, <Idc: 子镇机房>]>
>>> data = IdcSerializer(Idc.objects.all(), many=True)
>>> data
IdcSerializer(<QuerySet [<Idc: 子镇机房>, <Idc: 潞城机房>, <Idc: 子镇机房>, <Idc: 子镇机房>, <Idc: 子镇机房>]>, many=True):
id = IntegerField(read_only=True)
name = CharField(max_length=32, required=True)
address = CharField(max_length=256, required=True)
phone = CharField(max_length=15, required=True)
email = EmailField(required=True)
letter = CharField(max_length=5, required=True)
>>> from rest_framework.renderers import JSONRenderer
>>> content = JSONRenderer().render(data.data)
>>> content
b‘[{"id":1,"name":"\xe5\xad\x90\xe9\x95\x87\xe6\x9c\xba\xe6\x88\xbf","address":"\xe5\xb1\xb1\xe8\xa5\xbf\xe5\xad\x90\xe9\x95\x87\x
e6\x9c\xba\xe6\x88\xbf","phone":"12345678","email":"weizi@163.com","letter":"zz"},{"id":2,"name":"\xe6\xbd\x9e\xe5\x9f\x8e\xe6\x9c
\xba\xe6\x88\xbf","address":"\xe5\xb1\xb1\xe8\xa5\xbf\xe6\xbd\x9e\xe5\x9f\x8e\xe6\x9c\xba\xe6\x88\xbf","phone":"12345678","email":
"weizi@163.com","letter":"lc"},{"id":3,"name":"\xe5\xad\x90\xe9\x95\x87\xe6\x9c\xba\xe6\x88\xbf","address":"\xe5\xb1\xb1\xe8\xa5\x
bf\xe5\xad\x90\xe9\x95\x87\xe6\x9c\xba\xe6\x88\xbf","phone":"12345678","email":"weizi@163.com","letter":"zz"},{"id":4,"name":"\xe5
\xad\x90\xe9\x95\x87\xe6\x9c\xba\xe6\x88\xbf","address":"\xe5\xb1\xb1\xe8\xa5\xbf\xe5\xad\x90\xe9\x95\x87\xe6\x9c\xba\xe6\x88\xbf"
,"phone":"12345678","email":"weizi@163.com","letter":"zz"},{"id":5,"name":"\xe5\xad\x90\xe9\x95\x87\xe6\x9c\xba\xe6\x88\xbf","addr
ess":"\xe5\xb1\xb1\xe8\xa5\xbf\xe5\xad\x90\xe9\x95\x87\xe6\x9c\xba\xe6\x88\xbf","phone":"12345678","email":"weizi@163.com","letter
":"zz"}]‘
>>>

1,序列化
  1 )拿到queryset
  2)将queryset给序列化类
    Serializer = IdcSerializer(idc)
    多个对象 serializer = IdcSerializer(quueeryset, many=Tr)

  3)转JSON格式
  JSONRenderer().render(serializer.data)

2,反序列化
  Data = JSONParser().Parse(BytesIO(content))
  serializer =IdcSerializer(data=data)
  serializer .is_valid()
  Serializer.save()

 

Django-3

原文:https://www.cnblogs.com/weizitianming/p/11259428.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!