Loại bỏ Hardcoded URL trong Python Django

Nội dung

Bài này sẽ giới thiệu những nội dung sau:

  • Hardcoded URL là gì?
  • Cách loại bỏ Hardcoded URL

Hardcoded URL là gì?

Hiện tại blog Kteam bây giờ thiết kế url thông tin bài viết là /blog/id, vậy giả sử sau này trang web phát triển lên thì Kteam muốn chia rõ các loại bài viết như chia ra bài viết của Python hay của Java như:  /blog/java/id/blog/python/django/id, …

Như vậy, Kteam lúc đó phải chỉnh lại đường dẫn path để theo đúng ý tưởng. Tuy nhiên sẽ gặp vấn đề như sau:

Các đường dẫn ở đây sẽ báo lỗi, như vậy chúng ta cần phải sửa lại cho đúng. Tuy nhiên, khi làm website thì việc sử dụng tag <a> có đường dẫn này rất nhiều, và chúng ta không thể nào nhớ đã gán url này ở đâu.

Như vậy hardcoded là những code ta gán cứng cho những thứ dễ bị thay đổi trong quá trình phát triển phần mềm. Việc loại bỏ hardcoded là quan trọng trong lập trình viên. Kteam sẽ giúp các bạn cách loại bỏ hardcoded url.


Cách loại bỏ Hardcode URL

Ở urls.py, Kteam sẽ đặt name cho những path như sau:

urlpatterns = [
   path('', views.list, name='blog'),
   path('<int:id>/', views.post, name='post'),
]
urlpatterns = [
   path('', views.index),
   path('contact/', views.contact, name='contact'),
]

Và dựa vào những name này ta sẽ đặt trong các template. Đầu tiên là ở base.html, ở phần sliderbar kteam sẽ đổi là:

<ul class="nav flex-column">
    <li><a href="/redirect?Id=ockOPgmf%2bYcKOZ%2bjTTUlZHvO8ZR7NgpHNjdzDYB9hhE%3d" tin cá nhân</a></li>
    <li><a href="/redirect?Id=bPkSKQqMZ9erlLi6p21Q4A%3d%3d" url 'blog' %}">Bài viết</a></li>
    <li><a href="/redirect?Id=bPkSKQqMZ9erlLi6p21Q4A%3d%3d" url 'contact' %}">Liên hệ</a></li>
</ul>

Như vậy, Jinja lẽ dựa vào name url để lấy ra đường dẫn tương ứng.

Tiếp theo, với đường dẫn có key như thông tin bài viết thì làm sao. Ta sẽ để id phía sau url như thế này:

  • blog.html
{% block content %}
{% for post in Posts %}
    <h4>{{post.date|date:"d-m-Y"}}<a href="/redirect?Id=bPkSKQqMZ9erlLi6p21Q4A%3d%3d" url 'post' post.id %}">{{post.title}}</a></h4>
{% endfor %}
{% endblock %}

Bây giờ ta kiểm tra kết quả:

Jinja đã chuyển được từ name sang đúng url tương ứng.


Leave a Reply