# django-mobile-app-version
A Django app for managing mobile app versions through your API.
## Requirements
- Python 3.13+
- Django 3.0+
- Django REST Framework 3.14+
## Installation
```sh
pip install django-mobile-app-version
```
## Quick Start
1. Add `'mobile_app_version.apps.MobileAppVersionConfig'` to your `INSTALLED_APPS` in _`settings.py`_ module:
```python
INSTALLED_APPS = [
...
'mobile_app_version.apps.MobileAppVersionConfig',
]
```
2. Include the Mobile App Version URLconf in your projects `urls.py` like this:
```python
path('app-versions', include('mobile_app_version')),
```
3. Run migrations to create the database tables:
```sh
python manage.py migrate mobile_app_version
```
If you clone this app directly in your project and have changes to application models, first run:
```sh
python manage.py makemigrations mobile_app_version
python manage.py migrate mobile_app_version
```
## Version Format
### Semantic Versioning
The `version` field follows [Semantic Versioning](https://semver.org/) format: **X.Y.Z**
- **X** (Major): Incremented for incompatible API changes
- **Y** (Minor): Incremented for backwards-compatible functionality additions
- **Z** (Patch): Incremented for backwards-compatible bug fixes
#### Valid Version Examples
```
1.0.0
2.5.3
10.20.30
0.1.0
```
#### Invalid Version Examples
```
1.0 # Missing patch version
v1.0.0 # Prefix not allowed
1.0.0-alpha # Pre-release tags not allowed
1.0.0.1 # Too many components
01.0.0 # Leading zeros not allowed
```
### API Usage
When creating or updating a mobile app version through the API, the version field must follow the semantic versioning format:
```python
# Valid request
{
"version": "1.0.0",
"platform_type": "ANDROID",
"link": "https://example.com/app.apk",
"forcing_update": true
}
# Invalid request - will return validation error
{
"version": "v1.0.0", # Error: Version must follow semantic versioning format (X.Y.Z)
"platform_type": "ANDROID",
"link": "https://example.com/app.apk"
}
```
### Error Messages
If an invalid version format is provided, you'll receive a clear error message:
```json
{
"version": [
"Version must follow semantic versioning format (X.Y.Z). Each component must be a non-negative integer. Example: 1.0.0, 2.3.4"
]
}
```
## Contributing
Interested in contributing? Please see our [CONTRIBUTING.md](CONTRIBUTING.md) for development setup instructions and guidelines.
Raw data
{
"_id": null,
"home_page": "https://github.com/javadnikbakht/django_mobile_app_version",
"name": "django-mobile-app-version",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.13",
"maintainer_email": null,
"keywords": "django, mobile, app, version, api, rest",
"author": "Mohammad Javad Nikbakht",
"author_email": "Mohammad Javad Nikbakht <javadnikbakht@mail.com>",
"download_url": "https://files.pythonhosted.org/packages/be/33/c6e07f71bada70a1f7c9af54e04cae11319657e2114a424ab1127f2edfa8/django_mobile_app_version-1.2.0.tar.gz",
"platform": null,
"description": "# django-mobile-app-version\n\nA Django app for managing mobile app versions through your API.\n\n## Requirements\n\n- Python 3.13+\n- Django 3.0+\n- Django REST Framework 3.14+\n\n## Installation\n\n```sh\npip install django-mobile-app-version\n```\n\n## Quick Start\n\n1. Add `'mobile_app_version.apps.MobileAppVersionConfig'` to your `INSTALLED_APPS` in _`settings.py`_ module:\n```python\nINSTALLED_APPS = [\n ...\n 'mobile_app_version.apps.MobileAppVersionConfig',\n]\n```\n\n2. Include the Mobile App Version URLconf in your projects `urls.py` like this:\n```python\npath('app-versions', include('mobile_app_version')),\n```\n\n3. Run migrations to create the database tables:\n```sh\npython manage.py migrate mobile_app_version\n```\n\nIf you clone this app directly in your project and have changes to application models, first run:\n```sh\npython manage.py makemigrations mobile_app_version\npython manage.py migrate mobile_app_version\n```\n\n## Version Format\n\n### Semantic Versioning\n\nThe `version` field follows [Semantic Versioning](https://semver.org/) format: **X.Y.Z**\n\n- **X** (Major): Incremented for incompatible API changes\n- **Y** (Minor): Incremented for backwards-compatible functionality additions \n- **Z** (Patch): Incremented for backwards-compatible bug fixes\n\n#### Valid Version Examples\n```\n1.0.0\n2.5.3\n10.20.30\n0.1.0\n```\n\n#### Invalid Version Examples\n```\n1.0 # Missing patch version\nv1.0.0 # Prefix not allowed\n1.0.0-alpha # Pre-release tags not allowed\n1.0.0.1 # Too many components\n01.0.0 # Leading zeros not allowed\n```\n\n### API Usage\n\nWhen creating or updating a mobile app version through the API, the version field must follow the semantic versioning format:\n\n```python\n# Valid request\n{\n \"version\": \"1.0.0\",\n \"platform_type\": \"ANDROID\",\n \"link\": \"https://example.com/app.apk\",\n \"forcing_update\": true\n}\n\n# Invalid request - will return validation error\n{\n \"version\": \"v1.0.0\", # Error: Version must follow semantic versioning format (X.Y.Z)\n \"platform_type\": \"ANDROID\",\n \"link\": \"https://example.com/app.apk\"\n}\n```\n\n### Error Messages\n\nIf an invalid version format is provided, you'll receive a clear error message:\n\n```json\n{\n \"version\": [\n \"Version must follow semantic versioning format (X.Y.Z). Each component must be a non-negative integer. Example: 1.0.0, 2.3.4\"\n ]\n}\n```\n\n## Contributing\n\nInterested in contributing? Please see our [CONTRIBUTING.md](CONTRIBUTING.md) for development setup instructions and guidelines.\n",
"bugtrack_url": null,
"license": "GPL-3.0",
"summary": "Pluggable app for your Django projects to modify your mobile app versions using your API.",
"version": "1.2.0",
"project_urls": {
"Homepage": "https://github.com/javadnikbakht/django_mobile_app_version",
"Release Notes": "https://github.com/javadnikbakht/django_mobile_app_version/releases",
"Source": "https://github.com/javadnikbakht/django_mobile_app_version",
"Tracker": "https://github.com/javadnikbakht/django_mobile_app_version/issues"
},
"split_keywords": [
"django",
" mobile",
" app",
" version",
" api",
" rest"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "4aaf9ab08baa06056a6f56dcbf678a4a8b62757d51d6755096980d6cb9e66808",
"md5": "c7fab2c1a17254c7783833330bc8011b",
"sha256": "e437e9da0552f9871ace40b5ee3c7d01b47f70dcbaadc731bfae6679c3740396"
},
"downloads": -1,
"filename": "django_mobile_app_version-1.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c7fab2c1a17254c7783833330bc8011b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.13",
"size": 10434,
"upload_time": "2025-10-22T06:31:19",
"upload_time_iso_8601": "2025-10-22T06:31:19.134481Z",
"url": "https://files.pythonhosted.org/packages/4a/af/9ab08baa06056a6f56dcbf678a4a8b62757d51d6755096980d6cb9e66808/django_mobile_app_version-1.2.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "be33c6e07f71bada70a1f7c9af54e04cae11319657e2114a424ab1127f2edfa8",
"md5": "494dd592deb868406157fe23be48fa57",
"sha256": "63b0760e3db58aa99d8e0fd7de379978694da0c1408bedca01e084bd1735cc6b"
},
"downloads": -1,
"filename": "django_mobile_app_version-1.2.0.tar.gz",
"has_sig": false,
"md5_digest": "494dd592deb868406157fe23be48fa57",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.13",
"size": 8637,
"upload_time": "2025-10-22T06:31:19",
"upload_time_iso_8601": "2025-10-22T06:31:19.987273Z",
"url": "https://files.pythonhosted.org/packages/be/33/c6e07f71bada70a1f7c9af54e04cae11319657e2114a424ab1127f2edfa8/django_mobile_app_version-1.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-22 06:31:19",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "javadnikbakht",
"github_project": "django_mobile_app_version",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "djangorestframework",
"specs": [
[
"==",
"3.14.0"
]
]
},
{
"name": "packaging",
"specs": [
[
"==",
"21.3"
]
]
}
],
"lcname": "django-mobile-app-version"
}