Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
django-rest-framework
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
django-rest-framework
Commits
196fa5e9
Commit
196fa5e9
authored
Nov 21, 2012
by
Stephan Groß
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #436 from minddust/regex_field
added RegexField
parents
3268c673
03100168
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
75 additions
and
4 deletions
+75
-4
docs/api-guide/fields.md
+10
-0
docs/topics/release-notes.md
+4
-3
rest_framework/fields.py
+29
-0
rest_framework/tests/models.py
+5
-0
rest_framework/tests/serializer.py
+27
-1
No files found.
docs/api-guide/fields.md
View file @
196fa5e9
...
@@ -153,6 +153,16 @@ A text representation, validates the text to be a valid e-mail address.
...
@@ -153,6 +153,16 @@ A text representation, validates the text to be a valid e-mail address.
Corresponds to
`django.db.models.fields.EmailField`
Corresponds to
`django.db.models.fields.EmailField`
## RegexField
A text representation, that validates the given value matches against a certain regular expression.
Uses Django's
`django.core.validators.RegexValidator`
for validation.
Corresponds to
`django.forms.fields.RegexField`
**Signature:**
`RegexField(regex, max_length=None, min_length=None)`
## DateField
## DateField
A date representation.
A date representation.
...
...
docs/topics/release-notes.md
View file @
196fa5e9
...
@@ -6,10 +6,11 @@
...
@@ -6,10 +6,11 @@
## Master
## Master
*
Added
`SerializerMethodField`
*
Added
`RegexField`
.
*
Added
`SerializerMethodField`
.
*
Serializer performance improvements.
*
Serializer performance improvements.
*
Added
`obtain_token_view`
to get tokens when using
`TokenAuthentication`
*
Added
`obtain_token_view`
to get tokens when using
`TokenAuthentication`
.
*
Bugfix: Django 1.5 configurable user support for
`TokenAuthentication`
*
Bugfix: Django 1.5 configurable user support for
`TokenAuthentication`
.
## 2.1.3
## 2.1.3
...
...
rest_framework/fields.py
View file @
196fa5e9
import
copy
import
copy
import
datetime
import
datetime
import
inspect
import
inspect
import
re
import
warnings
import
warnings
from
io
import
BytesIO
from
io
import
BytesIO
...
@@ -802,6 +803,34 @@ class EmailField(CharField):
...
@@ -802,6 +803,34 @@ class EmailField(CharField):
return
result
return
result
class
RegexField
(
CharField
):
type_name
=
'RegexField'
def
__init__
(
self
,
regex
,
max_length
=
None
,
min_length
=
None
,
*
args
,
**
kwargs
):
super
(
RegexField
,
self
)
.
__init__
(
max_length
,
min_length
,
*
args
,
**
kwargs
)
self
.
regex
=
regex
def
_get_regex
(
self
):
return
self
.
_regex
def
_set_regex
(
self
,
regex
):
if
isinstance
(
regex
,
basestring
):
regex
=
re
.
compile
(
regex
)
self
.
_regex
=
regex
if
hasattr
(
self
,
'_regex_validator'
)
and
self
.
_regex_validator
in
self
.
validators
:
self
.
validators
.
remove
(
self
.
_regex_validator
)
self
.
_regex_validator
=
validators
.
RegexValidator
(
regex
=
regex
)
self
.
validators
.
append
(
self
.
_regex_validator
)
regex
=
property
(
_get_regex
,
_set_regex
)
def
__deepcopy__
(
self
,
memo
):
result
=
copy
.
copy
(
self
)
memo
[
id
(
self
)]
=
result
result
.
validators
=
self
.
validators
[:]
return
result
class
DateField
(
WritableField
):
class
DateField
(
WritableField
):
type_name
=
'DateField'
type_name
=
'DateField'
...
...
rest_framework/tests/models.py
View file @
196fa5e9
...
@@ -165,3 +165,8 @@ class BlankFieldModel(RESTFrameworkModel):
...
@@ -165,3 +165,8 @@ class BlankFieldModel(RESTFrameworkModel):
# Model for issue #380
# Model for issue #380
class
OptionalRelationModel
(
RESTFrameworkModel
):
class
OptionalRelationModel
(
RESTFrameworkModel
):
other
=
models
.
ForeignKey
(
'OptionalRelationModel'
,
blank
=
True
,
null
=
True
)
other
=
models
.
ForeignKey
(
'OptionalRelationModel'
,
blank
=
True
,
null
=
True
)
# Model for RegexField
class
Book
(
RESTFrameworkModel
):
isbn
=
models
.
CharField
(
max_length
=
13
)
rest_framework/tests/serializer.py
View file @
196fa5e9
...
@@ -2,7 +2,7 @@ import datetime
...
@@ -2,7 +2,7 @@ import datetime
from
django.test
import
TestCase
from
django.test
import
TestCase
from
rest_framework
import
serializers
from
rest_framework
import
serializers
from
rest_framework.tests.models
import
(
ActionItem
,
Anchor
,
BasicModel
,
from
rest_framework.tests.models
import
(
ActionItem
,
Anchor
,
BasicModel
,
BlankFieldModel
,
BlogPost
,
CallableDefaultValueModel
,
DefaultValueModel
,
BlankFieldModel
,
BlogPost
,
Book
,
CallableDefaultValueModel
,
DefaultValueModel
,
ManyToManyModel
,
Person
,
ReadOnlyManyToManyModel
)
ManyToManyModel
,
Person
,
ReadOnlyManyToManyModel
)
...
@@ -40,6 +40,13 @@ class CommentSerializer(serializers.Serializer):
...
@@ -40,6 +40,13 @@ class CommentSerializer(serializers.Serializer):
return
instance
return
instance
class
BookSerializer
(
serializers
.
ModelSerializer
):
isbn
=
serializers
.
RegexField
(
regex
=
r'^[0-9]{13}$'
,
error_messages
=
{
'invalid'
:
'isbn has to be exact 13 numbers'
})
class
Meta
:
model
=
Book
class
ActionItemSerializer
(
serializers
.
ModelSerializer
):
class
ActionItemSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
class
Meta
:
...
@@ -258,6 +265,25 @@ class ValidationTests(TestCase):
...
@@ -258,6 +265,25 @@ class ValidationTests(TestCase):
self
.
assertEquals
(
serializer
.
errors
,
{
'info'
:
[
u'Ensure this value has at most 12 characters (it has 13).'
]})
self
.
assertEquals
(
serializer
.
errors
,
{
'info'
:
[
u'Ensure this value has at most 12 characters (it has 13).'
]})
class
RegexValidationTest
(
TestCase
):
def
test_create_failed
(
self
):
serializer
=
BookSerializer
(
data
=
{
'isbn'
:
'1234567890'
})
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEquals
(
serializer
.
errors
,
{
'isbn'
:
[
u'isbn has to be exact 13 numbers'
]})
serializer
=
BookSerializer
(
data
=
{
'isbn'
:
'12345678901234'
})
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEquals
(
serializer
.
errors
,
{
'isbn'
:
[
u'isbn has to be exact 13 numbers'
]})
serializer
=
BookSerializer
(
data
=
{
'isbn'
:
'abcdefghijklm'
})
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEquals
(
serializer
.
errors
,
{
'isbn'
:
[
u'isbn has to be exact 13 numbers'
]})
def
test_create_success
(
self
):
serializer
=
BookSerializer
(
data
=
{
'isbn'
:
'1234567890123'
})
self
.
assertTrue
(
serializer
.
is_valid
())
class
MetadataTests
(
TestCase
):
class
MetadataTests
(
TestCase
):
def
test_empty
(
self
):
def
test_empty
(
self
):
serializer
=
CommentSerializer
()
serializer
=
CommentSerializer
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment