Upgrade python 2 -> 3 and Django Modernization

 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

  1. 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.

  2. Automated tests

    Opmerking: Er zijn geen bestaande geautomatiseerde tests. Alle validatie moet handmatig gebeuren totdat er tests zijn toegevoegd.

  3. 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(...) → native str

    • basestring → gebruik str

  • Bytes vs. String

    • Audit alle I/O- en serialisatie-paden (open(..., 'rb'), JSON, HTTP).

2.4. Update Dependencies

  1. Compatibility check

    • Verzeker dat elke third-party library Python 3.x ondersteunt.

    • Upgrade of vervang pakketten waar nodig.

  2. Generate new requirements file

    pip freeze > requirements-py3.txt
    
  3. Optional consolidation

    • Merge requirements-py3.txt in één top-level requirements.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

  1. Kies de nieuwste stabiele Django-release (bijv. 4.x).

  2. 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

  1. Verify de TEMPLATES sectie in settings.py.

  2. 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

  1. Smoke-test alle kritieke user flows handmatig in lokale/dev omgeving.

  2. Static analysis

    flake8 .
    pylint .
    
  3. Voer basis geautomatiseerde tests in (hoofdprioriteit) vóór staging-deploy.


5. CI/CD & Deployment

  1. CI pipeline

    • Update Dockerfile of build-scripts naar python:3.x base image.

    • Installeer vanuit requirements-py3.txt (of geconsolideerde requirements.txt).

  2. Database migrations

    python manage.py makemigrations
    python manage.py migrate
    
  3. Deploy naar staging

    • Voer volledige regressie-QA uit.

    • Controleer logs, foutpercentages en performance.

  4. Productie-rollout

    • Overweeg Blue/Green of Canary strategie.

    • Voorzie een rollback-plan voor kritieke issues.


 

 

Prompt for Codex open AI or Copilot Github see source for markdown

Comments