Upgrade “assessment” App: Python 2 → Python 3 & Django Modernization
Gebruik deze handleiding als complete workflow om de "assessment" applicatie van Python 2 naar Python 3 te migreren en te upgraden naar een moderne Django-release. De tekst is volledig in Markdown geschreven en kan direct in Codex Chat gebruikt worden.
1. Preparation & Inventory
-
Lock down the codebase
-
Maak een tagged release of branch van de huidige Python 2.7 + Django code.
-
Deze snapshot dient als rollback-punt indien nodig.
-
-
Automated tests
Opmerking: Er zijn geen bestaande geautomatiseerde tests. Alle validatie moet handmatig gebeuren totdat er tests zijn toegevoegd.
-
Export current dependencies
pip freeze > requirements-py2.txt
2. Migrate to Python 3
2.1. Create & Activate Py3 Virtual Environment
python3 -m venv venv-py3
source venv-py3/bin/activate
pip install -r requirements-py2.txt
2.2. Automated Refactoring
2to3 -w .
modernize -w .
-
Laat
2to3
een eerste pass over de code lopen. -
Gebruik
modernize
voor community-onderhouden compatibiliteitsshims.
2.3. Manual Code Review & Adjustments
-
Search for deprecated patterns:
-
print
(zonder haakjes) -
xrange
-
Oude exceptions-syntax (
except Exception, e:
) -
.iter*()
vs.keys()
,.items()
-
-
Convert legacy types:
-
unicode(...)
→ nativestr
-
basestring
→ gebruikstr
-
-
Bytes vs. String
-
Audit alle I/O- en serialisatie-paden (
open(..., 'rb')
, JSON, HTTP).
-
2.4. Update Dependencies
-
Compatibility check
-
Verzeker dat elke third-party library Python 3.x ondersteunt.
-
Upgrade of vervang pakketten waar nodig.
-
-
Generate new requirements file
pip freeze > requirements-py3.txt
-
Optional consolidation
-
Merge
requirements-py3.txt
in één top-levelrequirements.txt
, indien de projectstructuur dit toelaat.
-
3. Upgrade to Modern Django
3.1. Enforce Safe ForeignKey Deletion
In alle modellen:
from django.db import models
class MyModel(models.Model):
other = models.ForeignKey(
'OtherModel',
on_delete=models.CASCADE
)
3.2. Select Target Django Version
-
Kies de nieuwste stabiele Django-release (bijv. 4.x).
-
Lees de sectie Backwards-Incompatible Changes in de release-opmerkingen.
3.3. Settings & Middleware
-
Rename middleware
- MIDDLEWARE_CLASSES = [...] + MIDDLEWARE = [...]
-
Remove deprecated settings
-
TEMPLATE_DEBUG
-
Oude
MIDDLEWARE_CLASSES
verwijzingen
-
3.4. Modernize URL Configuration
- from django.conf.urls import url
- urlpatterns = [
- url(r'^foo/', foo_view),
- ...
- ]
+ from django.urls import path, re_path
+ urlpatterns = [
+ path('foo/', foo_view),
+ re_path(r'^bar/(?P<id>\d+)/$', bar_view),
+ ...
+ ]
3.5. Templates & Rendering
-
Verify de
TEMPLATES
sectie insettings.py
. -
Replace direct
Context(...)
gebruik:- from django.template import Context, loader - template = loader.get_template('template.html') - content = template.render(Context(ctx)) + from django.shortcuts import render + content = render(request, 'template.html', ctx)
3.6. Models & QuerySets
-
Explicit
on_delete
- ForeignKey(OtherModel, on_delete=None) + ForeignKey(OtherModel, on_delete=models.CASCADE)
-
Review advanced options:
-
unique_for_date
op datum gebaseerde velden -
Correct gebruik van
select_related()
vs.prefetch_related()
-
3.7. Signals, Forms & Admin
-
Remove legacy decorators
# Verwijder alle @python_2_unicode_compatible gebruik
-
Update Form en ModelAdmin methoden
-
Pas aan naar nieuwe signatures (bijv.
ModelAdmin.get_queryset(self, request)
).
-
4. Testing & QA
-
Smoke-test alle kritieke user flows handmatig in lokale/dev omgeving.
-
Static analysis
flake8 . pylint .
-
Voer basis geautomatiseerde tests in (hoofdprioriteit) vóór staging-deploy.
5. CI/CD & Deployment
-
CI pipeline
-
Update Dockerfile of build-scripts naar
python:3.x
base image. -
Installeer vanuit
requirements-py3.txt
(of geconsolideerderequirements.txt
).
-
-
Database migrations
python manage.py makemigrations python manage.py migrate
-
Deploy naar staging
-
Voer volledige regressie-QA uit.
-
Controleer logs, foutpercentages en performance.
-
-
Productie-rollout
-
Overweeg Blue/Green of Canary strategie.
-
Voorzie een rollback-plan voor kritieke issues.
-
Comments
Post a Comment