Như tôi hiểu, bạn nên luôn sử dụng TextField
cho chuỗi có độ dài thay đổi khi sử dụng cơ sở dữ liệu PostgreSQL vì chênh lệch tốc độ giữa TextField
và CharField
không đáng kể với PostgreSQL. Tôi liên tưởng mới với Django, và đang cân nhắc việc sử dụng một số TextField
cho các url có độ dài thay đổi trong cơ sở dữ liệu của tôi. Tôi đã tự hỏi nếu có bất kỳ lợi thế để sử dụng URLField
? Nó có được coi là biểu mẫu không hợp lệ để sử dụng số TextField
thay vì một số URLField
cho các url không?Ưu điểm khi sử dụng URLField trên TextField?
Trả lời
URLField thực sự là CharField w/hỗ trợ của biểu thức chính quy dựa trên URL kiểm tra mẫu và một validator trực tuyến (được thay thế bằng một validator dựa RegEx), bạn có thể sử dụng TextField nếu bạn không quan tâm chiều dài-hạn chế của URL
from django.core.validators import URLValidator
# in model
field = models.TextField(validators=[URLValidator()])
Hơn nữa, việc sử dụng CharField hoặc TextField tùy thuộc vào việc bạn có muốn giới hạn độ dài tối đa trên trường hay không và loại phần tử nào phù hợp hơn để chỉnh sửa: văn bản hoặc đầu vào. Về phía PostgreSQL, không có sự khác biệt đáng kể.
https://docs.djangoproject.com/en/dev/ref/models/fields/#urlfield Tất nhiên bạn có thể sử dụng CharField/TextField nhưng xử lý thông tin nhập của người dùng và đảm bảo mọi người dùng nhập vào tùy bạn.
Từ mã nguồn:
# Như với CharField, điều này sẽ gây ra xác nhận URL được thực hiện
Nếu bạn thấy URLField source code bạn sẽ thấy nó thực sự là một CharField với URL validator.
Ngoài ra còn có sẵn sàng sử dụng các trường khác như EmailField, ImageField, * Field!
Hãy thử lớp này:
class LongURLField(TextField):
description = 'Long URL'
def __init__(self, verbose_name=None, name=None, **kwargs):
TextField.__init__(self, verbose_name, name, **kwargs)
self.validators.append(validators.URLValidator())
def formfield(self, **kwargs):
# As with TextField, this will cause URL validation to be performed
# twice.
defaults = {
'form_class': forms.URLField,
}
defaults.update(kwargs)
return super(LongURLField, self).formfield(**defaults)
đặt max_length thành 2000 và bạn có trường hoàn hảo :) – gabn88
- 1. Sử dụng WebServiceHostFactory Ưu và nhược điểm
- 2. Các tình huống hoặc ưu và nhược điểm khi sử dụng C++/CLI trên C#
- 3. Ưu điểm của việc sử dụng các đặc điểm trên các lớp trừu tượng là gì?
- 4. Ưu điểm và nhược điểm khi sử dụng Celery vs. RQ
- 5. Sử dụng Redis cho Pub Sub. Ưu điểm/Nhược điểm trên RabbitMQ
- 6. Ưu điểm và nhược điểm khi sử dụng hình ảnh được mã hóa base64
- 7. Ưu điểm và nhược điểm khi sử dụng lớp MultiSearcher của Lucene
- 8. Khi nào sử dụng diễn viên trong libgdx? Khuyết điểm và ưu điểm là gì?
- 9. django urlfield http prefix
- 10. Ưu điểm của Tesla trên GeForce
- 11. Ưu điểm của MySQLi trên MySQL
- 12. Ưu điểm của [HandleError] trên Application_Error
- 13. Ưu điểm của việc sử dụng Gọi lại Hibernate?
- 14. Ưu điểm của việc sử dụng Doctrine cho PHP?
- 15. Ưu điểm của việc sử dụng chuyển tiếp
- 16. Những ưu điểm và nhược điểm khi sử dụng bảng cập nhật Ajax trong ứng dụng ASP.NET
- 17. Ưu điểm của việc sử dụng định kiến mùa xuân?
- 18. Ưu điểm của việc sử dụng sai sót là gì?
- 19. Những ưu điểm của C# trên Python
- 20. Ưu điểm của việc sử dụng ExecutorService là gì?
- 21. Ưu điểm của việc sử dụng Automapper là gì?
- 22. Ưu điểm của việc sử dụng Ruby NArray trên Array là gì?
- 23. Ưu điểm và nhược điểm của việc sử dụng ARC là gì?
- 24. Một số ưu điểm khi sử dụng giao diện trong C#?
- 25. Bất kỳ ưu điểm nào khi sử dụng Liquibase để di chuyển cơ sở dữ liệu?
- 26. Ưu điểm của việc sử dụng các phím() khi lặp lại từ điển
- 27. Ưu điểm của việc sử dụng SVN trên CVS là gì?
- 28. Tại sao sử dụng SVN? Bất kỳ ưu điểm ẩn (trên GIT/Mercurial/Bazaar) có?
- 29. Ưu điểm của việc sử dụng Prolog trên các ngôn ngữ khác là gì?
- 30. Ưu điểm của TypeScript
Đối với hồ sơ, [IE không thể tải các URL dài hơn khoảng 2.000 chars] (https://stackoverflow.com/questions/417142/what-is-the- tối đa chiều dài của một trình duyệt khác nhau), vì vậy bạn chỉ có thể đặt 'max_length' thành 2000 trên' URLField' và gọi nó là một ngày. – mlissner
Bất kỳ tham chiếu nào đến việc không dùng URLField? – pravin
@pravin Đây không phải là URLField nhưng trình xác thực trước đó của nó không còn được dùng nữa. Trình xác thực đã truy cập vào URL trực tuyến để xác minh, bây giờ nó được thay thế bằng trình xác thực regex để kiểm tra tính hợp lệ của định dạng URL. – okm