• Как правильно преобразовать Text to HTML в Aps.Net?

    dmnBrest
    @dmnBrest Автор вопроса
    О! Не все так просто с wisiwig редакторами! Никогда нельзя использовать html от пользователя!

    А моя история такая:
    переписываю старый движек моего старого сайта написанного на RoR. А там логика была когда-то задумана использовать BBCodes. В итоге параноик во мне замутил такую логику. С фронта приходит текст с BBCodes, он попадает в BBCodes parser и затем пропусткается через Sanitizer (на всякий так как BBCodes уязвимы для XSS, вернее допотопные парсеры, которые писались сто лет назад). В итоге получается такой франкинштейн из plain text c тегами html. И вот тут на помощь приходит этот самый упомянутый simple_format из RoR который делает совсем красивый html. Думал что в asp.net что то похожее есть, но не нашел. В итоге надумал переехать на Markdown (как посоветовали выше). С ним все что я описал уже не надо, и поддержка у него получше BBCode.
    Написано
  • Как правильно преобразовать Text to HTML в Aps.Net?

    dmnBrest
    @dmnBrest Автор вопроса
    Да, в итоге к markdig и пришел и планирую его использовать. Просто исторически сложилось что использовались BBCode, отсюда и стока замарочек.
    Написано
  • Как правильно преобразовать Text to HTML в Aps.Net?

    dmnBrest
    @dmnBrest Автор вопроса
    Зачем изобретать велосипеды в наше время? Может это уже есть, просто надо уметь найти. Блин, в Ruby on Rails эту хрень придумали еще 20 лет назад, а в asp.net еще не додумались? Хотя да, чего это я? .Net это энтерпрайз где платят деньги за потраченное время а не за готовые решения :)))))
    Написано
  • Есть ли в ASP.NET возможность написания своих кастомных консольных тулов?

    dmnBrest
    @dmnBrest Автор вопроса
    Василий Банников, наверное нашел вариант как сделать правильно. Можете забить на предыдущий коммент :)

    ... 
    var configuration = new ConfigurationBuilder()
                            .SetBasePath(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + ".." + Path.DirectorySeparatorChar + "MyWebProject")
                            .AddJsonFile("appsettings.json", false)
                            .AddJsonFile("appsettings.Development.json", true)
                            .Build();
    
    IHostBuilder builder = Host.CreateDefaultBuilder(args)
                            .ConfigureAppConfiguration(builder =>
                            {
                                builder.Sources.Clear();
                                builder.AddConfiguration(configuration);
                            })
                            .ConfigureWebHostDefaults(webBuilder =>
                            {
                                webBuilder.UseStartup<Startup>();
                            });
    IHost host = builder.Build();
    
    Console.WriteLine(host);
    
    var dbContext  = (ApplicationDbContext)host.Services.GetService(typeof(ApplicationDbContext));
    
    var userIds = new List<int>{1, 2};
    var userProfiles = dbContext.UserProfiles
                        .Where(up => userIds.Contains(up.Id))
                        .ToList();
    Console.WriteLine(userProfiles.Count);
    ...
    Написано
  • Есть ли в ASP.NET возможность написания своих кастомных консольных тулов?

    dmnBrest
    @dmnBrest Автор вопроса
    Василий Банников, спасибо за информацию выше, многое прояснилось :). (Я просто недавно начал перебираться из python в .net) и благодаря вашим ответам откопал целую тему про работу в разных проектах через references. Но пока из примеров в интернете относительно моего вопроса как пошарить контекст из ASP.NET в другой проект не особо продвинулся. Нашел кучу инфы как создать такой-же контекст для EF и ASP.Net Identity (могу работать с базой через модели из ASP.NET проекта и даже могу пользователей создавать) но вижу что это не тот же самый контекст. Можете скинуть ссылки на какие-нибудь статьи с примерами похожей реализации (где выше вы писали про "контекст выносится в отдельную сборку"). На данные момент все что мне удалось родить вот такой подход: (не обращайте внимание на саму бизнес логику, мне пока важно понять именно подход к работе с контекстом) Ну и если будут замечания по каким-то моментам тоже буду признателен :)
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text.Json;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Identity;
    using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
    using Microsoft.EntityFrameworkCore;
    using Microsoft.Extensions.Configuration;
    using MyWebProject.Data;
    
    namespace MyWebProjectCLI
    {
        class Program
        {
            static void Main(string[] args)
            {
                MainAsync(args).GetAwaiter().GetResult();
            }
    
            static async Task MainAsync(string[] args) {
    
                Console.WriteLine("Hello World!");
    
                Console.WriteLine(Directory.GetCurrentDirectory());
    
                var configuration = new ConfigurationBuilder()
                                        .SetBasePath(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + ".." + Path.DirectorySeparatorChar + "MyWebProject")
                                        .AddJsonFile("appsettings.json", false)
                                        .AddJsonFile("appsettings.Development.json", true)
                                        .Build();
    
                var _connectionString = configuration.GetConnectionString("DefaultConnection");
    
                var options = new DbContextOptionsBuilder<ApplicationDbContext>()
                                .UseNpgsql(_connectionString)
                                .UseSnakeCaseNamingConvention().Options;
    
                using (var dbContext = new ApplicationDbContext(options))
                {
    
                    Console.WriteLine("Doom");
    
                    var userStore = new UserStore<ApplicationUser>(dbContext);
                    UserManager<ApplicationUser> _userManager = new UserManager<ApplicationUser>(userStore, null, new PasswordHasher<ApplicationUser>(), null, null, null, null, null, null);
    
                    var userIds = new List<int>{1, 2};
                    var userProfiles = dbContext.UserProfiles
                                        .Where(up => userIds.Contains(up.Id))
                                        .ToList();
                    Console.WriteLine(userProfiles.Count);
    
                    foreach (var up in userProfiles)
                    {
                        Console.WriteLine(JsonSerializer.Serialize(up));
    
                        var oldData = up.OldData.RootElement;
    
                        var user = new ApplicationUser { UserName = oldData.GetProperty("username").ToString(),
                                                         Email = oldData.GetProperty("email").ToString() };
                        var result = await _userManager.CreateAsync(user, oldData.GetProperty("encrypted_password").ToString());
                        if (!result.Succeeded)
                        {
                            Console.WriteLine("ERROR");
                            break;
    
    
    
                        }
    
    
                    }
    
    
                }
    
            }
        }
    }

    Почему вопрос возник.
    Есть строка где я создаю
    UserManager _userManager = new UserManager
    И он по ходу работает не так как в самом ASP.NET проекте - я вижу в базе users создаются с неправильной нормализацией (значения не в верхнем регистре). Как бы может оно и так будет работать, но хочется сделать по уму.
    Написано
  • Есть ли в ASP.NET возможность написания своих кастомных консольных тулов?

    dmnBrest
    @dmnBrest Автор вопроса
    Я правильно понимаю что этот dotnet tool позволит запустить какой-то класс.метод из моего ASP.NET проекта или это будет отдельный проект? Пробежался по ссылке но не увидел как это дело внедрить непосредственно в мой Web проект. Смысл в чем - мне надо что-то типа вызвать логику которая будет иметь доступ ко всем EF объектам, конфигам, сервисам. Можно конечно написать обычный Controller + Routing и дернуть его через CURL, но хотелось бы просто дернуть через CLI команду чтобы контекст поднялся, код отработал и аппа умерла.
    За наводку спасибо буду рыть в этом направлении :)
    Написано
  • Как работает авторизация JIRA?

    dmnBrest
    @dmnBrest
    Нашли в чем проблема? Такая же хрень. Уже целый день голову ломаю. Все исходные данные один в один как у вас, но возвращает 401 хоть тресни. Уже какие только запросы не пробовал, уже и библиотеку atlassian-jwt к себе в проект перенес чтобы разобрать расчет JWT по шагам и ничего. С Basic токеном все работает. С JWT ничего. Буду признателен за любые подсказки.
  • Как компилировать Ангуляр на стороне Heroku?

    dmnBrest
    @dmnBrest Автор вопроса
    Проблема в том что у меня бэкенд, а значит и основной проект Python, а не NodeJS. Поэтому в корне проект Pipfile. Но я проверил что будет если положить в корень Pipfile и package.json - ничего не получилось, НО! Heroku сам дал ответ что делать

    Warning: Multiple default buildpacks reported the ability to handle this app. The first buildpack in the list below will be used.
    remote: Detected buildpacks: Python,Node.js
    See https://devcenter.heroku.com/articles/buildpacks#b...

    По ходу надо ковырять Multipe Buildpacks
  • Если возможность сделать Django-Filer доступным для всех пользователей и разграничить доступ по папкам?

    dmnBrest
    @dmnBrest Автор вопроса
    javedimka, спасибо, вы подтвердили мои опасения.

    Возможно вы знаете какие-нибудь другие решения. Мне нужен простой Image/File manager чтобы был привязан к пользователю. Ну или хотя бы что-то готовое для фронтенда, что можно адаптировать под Django. Что-то не хочется пилить с нуля File Manager.
  • Если возможность сделать Django-Filer доступным для всех пользователей и разграничить доступ по папкам?

    dmnBrest
    @dmnBrest Автор вопроса
    Я имею в виду вот этот popup (там еще косяки со стилями показаны, но это для другого вопроса)
    https://snag.gy/GV9fk4.jpg
  • Есть ли готовые приложения (app) для Django для управления файлами/загрузками?

    dmnBrest
    @dmnBrest Автор вопроса
    Разобрался. Я просто неправильно настроил MEDIA :)
  • Есть ли готовые приложения (app) для Django для управления файлами/загрузками?

    dmnBrest
    @dmnBrest Автор вопроса
    Сергей Горностаев, завел с версией 1.11 (пока это не принципиально)
    не могли бы подсказать с таким вопросом.
    Вроде сделал все по вот этой инструкции
    https://django-filer.readthedocs.io/en/latest/inst...
    Вроде все работает - картинки загружаются, папка с миниатюрами и оригиналами есть, но картинки не показываются - не резолвится url, хотя в настройках url добавил.
    url(r'^filer/', include('filer.urls')),
    Вот что вижу
    https://snag.gy/6WoXwn.jpg
    https://snag.gy/gciYkf.jpg
  • Есть ли готовые приложения (app) для Django для управления файлами/загрузками?

    dmnBrest
    @dmnBrest Автор вопроса
    Сергей Горностаев, понял! Спасибо!
    Но кстати, не взлетел в Django 2.0
    Выдало
    ...
    File "/usr/local/lib/python3.6/site-packages/filer/models/__init__.py", line 3, in
    from .clipboardmodels import * # flake8: noqa
    File "/usr/local/lib/python3.6/site-packages/filer/models/clipboardmodels.py", line 9, in
    from . import filemodels
    File "/usr/local/lib/python3.6/site-packages/filer/models/filemodels.py", line 10, in
    from django.core import urlresolvers
    ImportError: cannot import name 'urlresolvers'

    Закинул удочку в репозиторий на github. И я там не один с вопросом совместимости в 2.0. Посмотрим что скажут.
  • Как правильно десериализировать объект в Django Rest Framework?

    dmnBrest
    @dmnBrest Автор вопроса
    javedimka, низкий поклон за edit2.
    Наконец-то пришло решение!!!!

    Вот так вот получилось. И как раз убил и второго зайца - сериализировать только определенные поля. И сериализатор отдельно писать не надо.

    u = User.objects.get(id=request.user.id)
        u1 = model_to_dict(u, fields=['id', 'email', 'username', 'last_login'])
        uu1 = JSONRenderer().render(u1)
        logger.debug(u1)
        uu2 = JSONParser().parse(io.BytesIO(uu1))
        u2 = User(**uu2)
        logger.debug(u2)
        logger.debug(u2.last_login)


    Единственно так и остается зависимость от DRF потому что нужны его JSONRenderer и JSONParser который понимает больше типов полей.
  • Как правильно десериализировать объект в Django Rest Framework?

    dmnBrest
    @dmnBrest Автор вопроса
    Ну да, я пытаюсь свой костыль сделать и не понимаю почему в Django c этим такая проблема.
    Мне нужно просто сериализировать объектв в JSON и обратно. ВСЕ!
    Сам поражаюсь - уже 3-й день ковыряюсь и не могу вкурить почему такую простую штуку нельзя сделать. Мне не нужны никакие View, url и прочая шляпа. Мне просто надо взять инстанс модели и сделать из нее json, и потом обратно. Что делать с этим json это мой личный фетиш. Пробовал django.core.serializer но какого хрена он раобтает только с миссивами объектов, а не с отдельным. Чтобы сериализировать/девериализировать 1-у запись надо извращаться. А любые запрос про JSON для Django ведут искючительно на DRF.
  • Будущее веб-разработчиков python?

    dmnBrest
    @dmnBrest
    Terras, увы но реальность слишком суровая и в среде тех кто не программирует на PHP, PHP не рассматривается как язык для серьезных задач. "Так, странички для школьников накидать пойдет". Это не мое мнение - это я вижу вокруг, сам вполне уважительно отношусь к этому языку.
  • Будущее веб-разработчиков python?

    dmnBrest
    @dmnBrest
    Расскажу об опыте работы со своей колокольни. Работаю уже 6 лет фрилансером на Salesforce и в основном работаю с мелкими бизнес клиентами. Их много, но задачи у них нифига не уровня Yandex или Google. И работников они ищут не в Моих Кругах. В общем поучаствовал я в разных проектах в которых для Salesforce пилятся интеграции. Естественно так как Salesforce непрофильная система то на чем пилить внешние сервисы абсолютно фиолетово. И вот когда встает вопрос на арену выходят NodeJS, Python, Java, .Net. Последние 2 отпадают потому что типа "дорого" и долго. Python отпадает потому что хрен спецов найдешь, и остается NodeJS потому что все в компаниях знают jQuery. Выбирают NodeJS берут Express, заводят хелло ворлд и дальше начинается попаболь. Начинается беготня потому что знания jQuery быстро заканчиваются, а собрать что-то рабочее если и получается то оно работает на чистой магии. Начинается судорожные поиски NodeJS спецов. Набирают еще армию школьников, которые добивают проект. Вот так и создается БОЛЬШОЙ спрос на NodeJS программистов. Реже в команде появляется python разраб и если принимается решение в пользу python картина выглядит куда лучше. Всех спецов python которых я видел, даже самоучки без продакшен опята на голову выше таких же JS разрабов. В Python просто так не приходят. Это сознательный выбор. В Python программисты качественнее. Не хочу обидеть хороших спецов по JS, но в основной массе они исключение скорее. Собственно поэтому Python предложений меньше. Мелкие клиенты не используют, поэтому спроса нет.
  • Будущее веб-разработчиков python?

    dmnBrest
    @dmnBrest
    flppv, да это все хорошо. Когда у вас есть уже многомиллионный сервис, с огромной нагрузкой, штат специалистов и время для оптимизации с использованием новых технологий, то почему бы нет. Не думаю что все эти сервисы изначально проектировались под NodeJS и используют его как 100% базу. Думаю что Python такой список будет побольше. А на счет мелких клиентов, которым некогда экспериментировать nodejs может скорее боком вылезти прежде чем они попадут в этот список Famous Apps using NodeJS.
  • Как можно создать сложное автоматически генерируемое поле в Django?

    dmnBrest
    @dmnBrest Автор вопроса
    Нагуглил вариант с переназначением save метода
    как описано здесь для Slug
    https://stackoverflow.com/questions/837828/how-do-...
    просто надо будет отдельно хранить счетчик, доставать последнее значение и записывать в поле при save для новой записи.
    Буду благодарен если скажете что ход моих мыслей верный :)