Как я могу менять значения БД из внешнего файла?
Я новичок в django поэтому плохо понимаю разные термины. Я использую сторонний графический модуль и хочу через него работать со значения в базе данных: удалять, добавлять и изменять. Другими словами я хочу запустить файл который не связан с django и html структурой получить определённое значение. Например из
from models import Artikle
a = Article.objects.get(id = 1)
show_window(a)
Мне посоветовали использовать REST API но изо специфического вопроса я не нашел нужного ответа. Я хочу работать с сайтом не только из браузера но и из моего собственного графического приложения.
Ответы (2 шт):
Допустим у нас есть небольшая модель с одним полем.
class Category(models.Model):
name_category = models.CharField(verbose_name = 'Название категории', max_length = 100, null=True)
пишем сериализатор
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = ('id', 'name_category')
дальше используем viewset из drf
from rest_framework import viewsets
from .serializers import CategorySerializer
class CategoryViewSet(viewsets.ModelViewSet):
serializer_class = CategorySerializer
queryset = Category.objects.all()
теперь прописываем роуты, можно использовать DefaultRouter() но я прописал руками(мне так удобнее)
from .views import CategoryViewSet
urlpatterns = [
path('api/post/', CategoryViewSet.as_view({'post':'create'})),
path('api/get/', CategoryViewSet.as_view({'get':'list','get_queryset':'get_queryset'})),
path('api/del/<int:pk>', CategoryViewSet.as_view({'put':'update','get':'retrieve','delete':'destroy'})),
]
Теперь у нас есть полностью функционирующие минимальное API и мы можем выполнять все основные задачи API, т. е. Операции Create Read Update Delete (CRUD).
Теперь создаю обычный файл со скриптом Для того чтобы получить все категории пишим такой небольшой скрипт
import requests, json
url = "http://127.0.0.1:8000/api/get/"
res = requests.get(url)
pars=json.loads(res.content.decode('utf-8'))
print(pars)
Для того чтобы добавить новую запись
import requests
url = "http://127.0.0.1:8000/api/post/"
data = {
'name_category':'test'
}
res = requests.post(url, data=data)
Теперь для того чтобы удалить какую-нибудь запись
import requests
data_description = 10 #id записи которую хотим удалить
url = "http://127.0.0.1:8000/api/del/" + str(data_description)
response = requests.delete(
url,
)
для put запроса попробуйте написать сами)
Я вроде разобрался но ответ является слегка не точным и пришлось сверятся с другим туториалом что бы во всем разобратся Я напишу небольшой туториал того что я сделал для тех кто также туп как и я
1 Вначале нужно установить
pip install django
pip install djangorestframework
2 после создать проект
django-admin startproject myfirst
myfirst - это название проекта вы можете заменить его на свое собственное название
3 создать приложение к нему
python manage.py startapp articles
manage.py - это основной файл к котором можно отдовать команды находится рядом с проэктом
articles - это название приложения вы можите заменить его на свое собственое назвние
4 После в файле ..myfirst\settings.py найти INSTALLED_APPS и добавить
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'articles'
]
rest_framework - это подключение к djangorestframework
articles - это название приложения
5 после в ..\articles\models.py нужно прописать
from django.db import models
class Category(models.Model):
name_category = models.CharField(verbose_name = 'Название категории', max_length = 100, null=True)
Category - это название модуля
name_category - название параметра
verbose_name - отображаемое название параметра
max_length - максимальное количество символов
6 это не обязательно но что бы увидеть изменения сразу в файле ..\articles\admin.py
нужно добавить
from .models import Category
admin.site.register(Category)
7 После сделать миграцию модулей
python manage.py makemigrations
python manage.py migrate
8 После нужно создать админ пользователя
python manage.py createsuperuser
Выбрать имя пользователя, email, пароль и подтверждение пароля При наборе пароля никакие символы не будут высвечиваться
9 для проверки правильности каждого этапа нужно включать
python manage.py runserver
и зайти на сайт http://127.0.0.1:8000/admin и войти использовал имя и пароль
10 после создать файл в article\settings.py и article\urls.py
11 в файле article\settings.py написать
from rest_framework import serializers
from .models import Category
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = ('id', 'name_category')
12 написать в articles\views.py следующее
from .models import Category
from rest_framework import viewsets
from .serializers import CategorySerializer
class CategoryViewSet(viewsets.ModelViewSet):
serializer_class = CategorySerializer
queryset = Category.objects.all()
13 создать url привязку для этого нужно в myfirst\urls.py добавить
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('articles.urls')),
]
А после в articles\urls.py
from django.contrib import admin
from django.urls import path, include
from . import views
from .views import CategoryViewSet
urlpatterns = [
path('get/', CategoryViewSet.as_view({'get':'list','get_queryset':'get_queryset'})),
path('post/', CategoryViewSet.as_view({'post':'create'})),
path('del/<int:pk>', CategoryViewSet.as_view({'put':'update','get':'retrieve','delete':'destroy'})),
]
14 И после создать любой независимый файл и написать
Для получения
import requests, json
url = "http://127.0.0.1:8000/api/get/"
res = requests.get(url)
pars=json.loads(res.content.decode('utf-8'))
print(pars)
Для добавления
import requests
url = "http://127.0.0.1:8000/api/post/"
data = {
'name_category':'test'
}
res = requests.post(url, data=data)
Для удаления
import requests
data_description = 10 #id записи которую хотим удалить
url = "http://127.0.0.1:8000/api/del/" + str(data_description)
response = requests.delete(
url,
)
Для обновления
import requests
data_description = 10 #id записи которую хотим изменить
url = "http://127.0.0.1:8000/api/del/" + str(data_description)
data = {
'name_category':'test'
}
response = requests.put(
url,
data,
)