小编Jek*_*son的帖子

如何使用 gitlab CI/CD 设置与 MySql 数据库的连接

我正在尝试使用 CI/CD gitlab 设置 django 项目的自动测试。问题是,我无法以任何方式连接到 Mysql 数据库。

gitlab-ci.yml

services:
  - mysql:5.7

variables:
      MYSQL_DATABASE: "db_name"
      MYSQL_ROOT_PASSWORD: "dbpass"
      MYSQL_USER: "username"
      MYSQL_PASSWORD: "dbpass"
      

stages:
  - test

test:
  stage: test
  before_script:
  - apt update -qy && apt-get install -qqy --no-install-recommends default-mysql-client
  - mysql --user=$MYSQL_USER --password=$MYSQL_PASSWORD --database=$MYSQL_DATABASE --host=$MYSQL_HOST --execute="SHOW DATABASES; ALTER USER '$MYSQL_USER'@'%' IDENTIFIED WITH mysql_native_password BY '$MYSQL_PASSWORD'"
  script:
  - apt update -qy
  - apt install python3 python3-pip virtualenvwrapper -qy
  - virtualenv --python=python3 venv/
  - source venv/bin/activate
  - pwd
  - pip install -r requirement.txt …
Run Code Online (Sandbox Code Playgroud)

mysql django gitlab

11
推荐指数
2
解决办法
2万
查看次数

fastapi (starlette) RedirectResponse 重定向到 post 而不是 get 方法

返回 RedirectResponse 对象后,我遇到了奇怪的重定向行为

事件.py

router = APIRouter()

@router.post('/create', response_model=EventBase)
async def event_create(
        request: Request,
        user_id: str = Depends(get_current_user),
        service: EventsService = Depends(),
        form: EventForm = Depends(EventForm.as_form)
):
    event = await service.post(
       ...
   )
    redirect_url = request.url_for('get_event', **{'pk': event['id']})
    return RedirectResponse(redirect_url)


@router.get('/{pk}', response_model=EventSingle)
async def get_event(
        request: Request,
        pk: int,
        service: EventsService = Depends()
):
    ....some logic....
    return templates.TemplateResponse(
        'event.html',
        context=
        {
            ...
        }
    )
Run Code Online (Sandbox Code Playgroud)

路由器.py

api_router = APIRouter()

...
api_router.include_router(events.router, prefix="/event")
Run Code Online (Sandbox Code Playgroud)

这段代码返回结果

127.0.0.1:37772 - "POST /event/22 HTTP/1.1" 405 Method Not …
Run Code Online (Sandbox Code Playgroud)

python starlette fastapi

11
推荐指数
1
解决办法
2万
查看次数

如何将自定义 css 类添加到 django-filters 字段

我试图找到一种适用于表单的方法,但这里的类不适用

class TrainerFilter(django_filters.FilterSet):
    price_lt = django_filters.NumberFilter(field_name="prise", lookup_expr='lt')
    class Meta:
        model = Profile
        fields = ['direction', 'group', 'child', 'price_lt']
        widgets = {
            'direction': SelectMultiple(attrs={'class': 'custom-select'}),     
        }
Run Code Online (Sandbox Code Playgroud)

django django-filter

7
推荐指数
1
解决办法
5697
查看次数

配置 AWS API Gateway 的日志记录

我创建了一个 lambda 函数来将文件上传到 s3。通过 AWS 界面进行测试时,一切正常。接下来我创建了 API Gateway 并尝试通过 ReactJs 发出请求。但我得到一个错误。我想查看发生了什么错误,但我无法向 API 网关添加日志。我所做的。

  1. 创建 API 网关 -> 转到阶段 -> 日志/跟踪
  2. 尝试激活复选框启用 CloudWatch Logs 但得到 CloudWatch Logs role ARN must be set in account settings to enable logging

  3. 使用下一个策略在 IAM 中创建角色:AmazonS3FullAccess、AmazonAPIGatewayPushToCloudWatchLogs、AWSLambdaBasicExecutionRole

  4. 复制角色 ARN

  5. 转到我的 api 的设置并尝试粘贴到 CloudWatch 日志角色 ARN。但是得到了The role ARN does not have required permissions set to API Gateway

你能告诉我我需要什么其他设置吗?

amazon-web-services aws-lambda aws-api-gateway

7
推荐指数
1
解决办法
5805
查看次数

DRF:如何在保存到数据库之前更改模型字段的值

如果我需要在保存到数据库之前更改一些字段值,因为我认为模型方法clear()是合适的。但尽管我竭尽全力,还是无法给他打电话。

例如,我需要将字段email设置为小写,将字段nda设置为null

模型.py

class Vendors(models.Model):

    nda = models.DateField(blank=True, null=True)
    parent = models.OneToOneField('Vendors', models.DO_NOTHING, blank=True, null=True)

    def clean(self):
        if self.nda == "":
            self.nda = None

class VendorContacts(models.Model):
    ....
    vendor = models.ForeignKey('Vendors', related_name='contacts', on_delete=models.CASCADE)
    email = models.CharField(max_length=80, blank=True, null=True, unique=True)

    def clean(self):
        if self.email:
            self.email = self.email.lower()
Run Code Online (Sandbox Code Playgroud)

序列化器.py

class VendorContactSerializer(serializers.ModelSerializer):
    class Meta:
        model = VendorContacts
        fields = (
                  ...
                  'email',)

class VendorsSerializer(serializers.ModelSerializer):
    contacts = VendorContactSerializer(many=True)

    class Meta:
        model = Vendors
        fields = (...
                  'nda', …
Run Code Online (Sandbox Code Playgroud)

python django django-rest-framework

7
推荐指数
2
解决办法
1万
查看次数

Django Rest Framework 中使用的解析器是什么?

我有一个简单的文件模型

class Documents(models.Model):
    """ uploaded documents"""

    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    upload = models.FileField(storage=PrivateMediaStorage())
    filename = models.CharField(_('documents name'), max_length=255, blank=True, null=True)
    datafile = models.FileField()
    created = models.DateTimeField(auto_now_add=True)
    type = models.ForeignKey(Doctype, on_delete=models.CASCADE, blank=True)
Run Code Online (Sandbox Code Playgroud)

要显示上传的文档列表并添加新文件,我使用了类

class DocumentsListView(viewsets.ViewSetMixin,generics.ListCreateAPIView):
    queryset = Documents.objects.all()
    serializer_class = DocumentsSerializer

    def perform_create(self, serializer):
        serializer.save(author=self.request.user)
Run Code Online (Sandbox Code Playgroud)

序列化程序.py

class DocumentsSerializer(AwsUrlMixin, serializers.ModelSerializer):
    type_name = serializers.CharField(source='type.type', read_only=True)
    type = serializers.PrimaryKeyRelatedField(queryset=Doctype.objects.all())
    view_file = serializers.SerializerMethodField()
    author = serializers.CharField(source='author.username', read_only=True)
    created = serializers.DateTimeField(format=date_format, input_formats=None, default_timezone=None, read_only=True)

    class Meta:
        model = Documents
        fields = ('id', 'author', 'filename', 'datafile', 'type', …
Run Code Online (Sandbox Code Playgroud)

django django-serializer django-rest-framework

6
推荐指数
2
解决办法
3585
查看次数

如何使用电话号码作为 Django 身份验证的用户名

我正在尝试扩展用户模型并使用用户名电话号码。我正在为新用户模型创建自定义用户模型和自定义管理器。

模型.py

from django.contrib.auth.models import AbstractUser, BaseUserManager
from django.core.validators import RegexValidator
from django.db import models
from django.utils.translation import ugettext_lazy as _


class UserManager(BaseUserManager):
    """Define a model manager for User model with no username field."""

    use_in_migrations = True

    def _create_user(self, phone, password, **extra_fields):
        """Create and save a User with the given phone and password."""
        if not phone:
            raise ValueError('The given phone must be set')
        self.phone = phone
        user = self.model(phone=phone, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_user(self, phone, password=None, **extra_fields):
        """Create …
Run Code Online (Sandbox Code Playgroud)

django

5
推荐指数
1
解决办法
2358
查看次数

Django Rest Framework在一个api端点中组合了多个查询集

如何连接特定模型列表的输出,这些模型的实例由不同的字段过滤?例如,我有一个地方模型和两个不同的URL。一个显示整个列表,另一个显示只有new_place = True的实例。使用django-filter做一个API。

models.py

class Places(models.Model):
    main_photo = models.ImageField(upload_to = 'album/')
    place = models.CharField(max_length=100)
    new_place = models.BooleanField(default = True)
    editor_choice = models.BooleanField(default = False, verbose_name = "Editors choice")
    most_popular = models.BooleanField(default = False, verbose_name = "Most popular")
Run Code Online (Sandbox Code Playgroud)

序列化器

class PlaceSerializer(ModelSerializer):

    url = HyperlinkedIdentityField(
    view_name='places_api:detail',
    lookup_field='pk'
    )
    class Meta:
        model = Places
        fields = (
            'url',
            'id',
            'main_photo',
            'name',
            'new_place',
            'most_popular', 
            'editor_choice',                        
        )
Run Code Online (Sandbox Code Playgroud)

full_list_views.py

class PlacesListAPIView(ListAPIView):
    queryset = Places.objects.all()
    serializer_class = PlaceSerializer
Run Code Online (Sandbox Code Playgroud)

new_places_views.py

class PlacesNewListAPIView(ListAPIView):
    queryset = Places.objects.all()
    serializer_class = PlaceSerializer …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

5
推荐指数
1
解决办法
1664
查看次数

如何在 drf-yasg 库中添加自己的参数和响应值以用于 swagger 文档?

我使用drf-yasg库为开发人员前端生成项目文档。我不知道如何将数据添加到参数响应字段

例如,这个类

class VendorsCreateView(APIView):
    """
    :param:
            data = {
            "vendor_name": "TestName",
            "country": "Belarus",
            "nda": "2020-12-12",
            "parent": "",
            "contacts": [{"contact_name": "Mrk", "phone": "2373823", "email": "dRqT@rgmail.com"},
                         {"contact_name": "Uio", "phone": "34567", "email": "rdq@gmail.com"}
                         ]
        }
    :return: swagger name
    """
Run Code Online (Sandbox Code Playgroud)

但我并没有完全得到我想要的 在此输入图像描述

如何添加这些参数?

django-rest-framework drf-yasg

5
推荐指数
2
解决办法
8341
查看次数

以最少的数据库查询次数保存(最小化保存方法调用)

我正在处理一个包含大量嵌套信息的 json 文件。为此,UploadElementFromExcelFile(APIView)我在类中使用嵌套循环,在调用serializer.save()方法的最后。然后在ElementCommonInfoSerializer序列化程序中的create()方法中,我保存/更新从序列化程序接收到的数据。此外,我创建/更新一个RfiParticipationStatus模型,该模型仅与最高嵌套级别(使用parent_category变量)相关。但是由于为循环的最底层成员调用了 create 方法,因此我对该RfiParticipationStatus模型进行了大量无用的数据库查询。同样的事情company_information节省。这是来自共享 json 文件的额外信息。它不引用序列化对象,我只需要在 post 方法调用的最开始保存 company_information 一次。在我的代码实现中,根据 for 循环的深度和内容,保存请求会发生数百次。

json数据样本

[
    {
        "Company_info": [
            {
                "question": "Company name",
                "answer": "Test"
            },
            {
                "question": "Parent company (if applicable)",
                "answer": "2test"
            },
            {....},
            {....}
        ]
    },
    {
        "Parent Category": " rtS2P",
        "Category": [
            {
                "Analytics": [
                    {
                        "Data Schema": [
                            {   '....': "",
                                "Attachments/Supporting Docs and Location/Link": "tui",
                                "SM score": 4,
                                "Analyst …
Run Code Online (Sandbox Code Playgroud)

python-3.x django-serializer django-rest-framework

5
推荐指数
1
解决办法
115
查看次数