Рубрика: Новости

  • mssql shrink database log (Обрезать логфайл mssql)

    Проблема встаёт может раз в год может реже, и каждый год открываю решения заного, надоело.

    делаем так

    сначала узнаём какие имена и где лежат БД

    в Query Analyser выбираю нужную БД и пишу запрос

        SELECT CAST(name AS VARCHAR(20)) AS 'Name',
               CAST(filename AS VARCHAR(75)) AS 'Filename'
        FROM sysfilesCode language: SQL (Structured Query Language) (sql)

    он говорит

    ExpressDiagnostic   	E:\Databases\ExpressDiagnosticTest.MDF                                     
    ExpressDiagnostic_lo	E:\Databases\ExpressDiagnosticTest_Log.LDF                                 Code language: SQL (Structured Query Language) (sql)

    теперь я выполняю вот такой запрос

    CHECKPOINT
    BACKUP LOG "ExpressDiagnosticTest" WITH TRUNCATE_ONLY
    CHECKPOINT
    DBCC SHRINKFILE ('ExpressDiagnostic_log')Code language: SQL (Structured Query Language) (sql)

    ExpressDiagnosticTest — полное название базы
    ExpressDiagnostic_log — системное Имя логфайла из результата первого запроса (!!!!не вот это ExpressDiagnosticTest_Log)

    допустим у меня несколько баз

    ExpressDiagnosticTest
    ExpressDiagnosticTest2010
    ExpressDiagnosticTest2011Code language: SQL (Structured Query Language) (sql)

    И т.п. а системное имя логфайла всегда одно ExpressDiagnostic_log

    И всё логфайлы не весят десятки содни гигабайт

  • Установка DjangoBB форума

    2 дня потратил на всё про всё, думал помру и не одолею я этого исполина…

    чтоб не копипастить, всё что я делал я рассписал на форуме поддержки

    вот тут ссылка
    http://support.djangobb.org/topic/227/

  • Разгоняем django сайт с помощью staticgenerator

    Интересная статья вот тут
    http://web-brains.com/2009/07/24/razgonyaem-django-sajt-s-pomoshyu-staticgenerator/

    оставляю на зметку, пригодиться

  • Django models.ImageField не загружает файлы

    Добрый час я потратил на вот обычную беду, вроде всё сделано верно, но форма передаёт имя файла. а сам файл на сервере не появляется, в дебаг-тулбар был SQL запрос на INSERT а поле bla bla avatar = WHERE blabla= blabla

    В итоге я стал понимать что форма шлёт только текстовые поля. и файлы не передаёт на сервер. и сервер ругается мол имя пришло а картинки нету!!!
    Говорит

    The 'avatar' attribute has no file associated with it.Code language: Python (python)

    Вот оно и тут… всё дело в свойствах формы, мне не хватало

    enctype="multipart/form-data"Code language: HTML, XML (xml)
  • Расширение профиля пользователя django

    в Django я по прежнему новичок, но что-то стараюсь понять и запомнить.

    стояла задача расширить профиль пользователя дополнительными полями, статей на эту тему пресс и малелькая тележка, но не получалось, то у кого-то на сайте парсер html сильно злой и код надо было переписывать, у кого-то были ошибки в примерах и т.п.

    но как-то оно получилось, попробую собрать все мысли в кучу в эту статью.

    Многие знают о django-registration и вот от автора этого замечательного приложения существует django-profiles котором я и воспользовался.

    устанавливаем django-profiles

    easy_install django-profilesCode language: Bash (bash)

    в models.py создадим модель профиля, которая наследуется от штатной User и добавим в ней нужное нам поле

    from django.contrib.auth.models import User
    ...
    ...
    class UserProfile(models.Model):
        # поле для связки со встроенной моделью пользователя Django
        user = models.ForeignKey(User, unique=True)
        # наше новое поле
        about = models.TextField(blank=True)Code language: Python (python)

    Далее в settings.py надо указать кто будет новым AUTH_PROFILE_MODULE

    AUTH_PROFILE_MODULE = 'list.UserProfile'Code language: Python (python)

    где list это ваше приложение в котором расположена модель расширяющая пользователя

    в принципе на этом можно закончить, ибо обращаться теперь можно к

    {{ user.get_profile.about }}Code language: Bash (bash)

    только нужно обратить внимание что надо пользоваться не context а RequestContext
    и указать это в
    TEMPLATE_CONTEXT_PROCESSORS файла settings.py

    TEMPLATE_CONTEXT_PROCESSORS = (
    	 ...
    	 'django.contrib.auth.context_processors.auth',
    	 ...
    	 ) Code language: Python (python)

    но мы идём дальше

    Теперь нам надо подключить django-profiles для просмотра\редактирования профиля

    в файле urls.py
    подключаем

        ...
        (r'^profiles/', include('profiles.urls')),
        ...Code language: Python (python)

    в settings.py также подключим приложение

    INSTALLED_APPS = (
    	 ...
    	 'profiles',
    	 )Code language: Python (python)

    теперь создадим таблицы в базе

    python manage.py syncdbCode language: Python (python)

    приложение profiles использует вот такие шаблоны

        profiles/create_profile.html
        profiles/edit_profile.html
        profiles/profile_detail.html
        profiles/profile_list.htmlCode language: Bash (bash)

    по названию понятно что к чему

    для начала отредактируем edit_profile.html

    {% extends "base.html" %}
    {% block title %}Edit Profile{% endblock %}
     
    {% block content %}
    <h1>Edit contact info for {{ user }} </h1>
     
    <form method="POST" action="">
        {{ form }}
        <input type="submit" name="submit" value="Update" id="submit">
    </form>
     
    {% endblock content %}Code language: HTML, XML (xml)

    сохраняем, теперь можно обратиться к /profiles/edit/ то должно открыться форма редактирования профиля.

    бывают ситуации, что в профиле есть какие-то поля, что запрещено редактировать пользователю, реализуется это довольно просто

    создаём класс формы, наследуемой от общей формы, в котором перечисляем, то что нам исключить от вывода пользователю
    forms.py

    from django.db import models
    from django.forms import ModelForm
    from PROJ.apps.APP.models import UserProfile
    
    .........
    class ProfileForm(forms.ModelForm):
      class Meta:
          model = UserProfile
          exclude = ('user','last_name',)Code language: Python (python)

    from PROJ.apps.APP.models import UserProfile
    проект и приложение где расположена расширенная модель

    теперь в urls.py надо указать, что страницу редактирования профиля надо открывать с нужной нам формой

    from PROJ.APP.forms import ProfileForm
    ........
        ('^profiles/edit', 'profiles.views.edit_profile', {'form_class': ProfileForm,}),
        (r'^profiles/', include('profiles.urls')),
    .......Code language: Python (python)

    Должно получиться примерно так.. проверяем на странице редактирования профиля (/profiles/edit/).

    Теперь сделаем страницу отображения профиля profile/profile_detail.html

    вывести можно что угодно из профиля вот так

    <p><strong>Address 2:</strong><br>{{ profile.address2 }}</p>Code language: Python (python)

    где address2 это дополнительное поле
    список пользователей с профилями можно вывести вот так

    profiles/profile_list.html

    {% extends "base.html" %}
    {% block content %}
    <h1>Список пользователей</h1>
    <br/><br/>
        {% for p in object_list  %}
    <a href="{% url profiles_profile_detail p.user %}">{{ p.user }}</a>
    {% endfor %}
    {% endblock %}Code language: Python (python)

    Теперь задача такая, сейчас профиль и пользователь живут почти своей жизнью, при регистрации пользователя профиль сам не создаётся это мы сейчас и решим сигналами.

    в models.py добавим

    from django.db.models import signals
    from bucket.signals import create_profile
     
    # When model instance is saved, trigger creation of corresponding profile
    signals.post_save.connect(create_profile, sender=User)Code language: Python (python)

    создадим файл, если он не создан signals.py:

    def create_profile(sender, instance, signal, created, **kwargs):
        """When user is created also create a matching profile."""
    
        from PROJ.apps.APP.models import UserProfile
    
        if created:
            UserProfile(user = instance).save()
            # Do additional stuff here if needed, e.g.
            # create other required related recordsCode language: Python (python)

    вот и всё, при регистрации нового пользователя автоматически будет создаваться к нему профиль, если у вас уже сейчас много пользователей, то создать для каждого профиль можно вот так

    $ python manage.py shell
     
    from django.contrib.auth.models import User
    from bucket.models import Profile
     
    users = User.objects.all()
    for u in users:
         try:
              p = u.get_profile()
         except p.DoesNotExist:
              Profile(user = u).save()Code language: Python (python)

    ещё коснусь вопроса редактирования своего email в профиль, пока ещё не совсем разобрался с этим.

    пока есть только пример, делается это анналогично через forms.py

    class ProfileForm(ModelForm):
     
        def __init__(self, *args, **kwargs):
            super(ProfileForm, self).__init__(*args, **kwargs)
            try:
                self.fields['email'].initial = self.instance.user.email
                # self.fields['first_name'].initial = self.instance.user.first_name
                # self.fields['last_name'].initial = self.instance.user.last_name
            except User.DoesNotExist:
                pass
     
        email = forms.EmailField(label="Primary email",help_text='')
     
        class Meta:
          model = Profile
          exclude = ('user',)        
     
        def save(self, *args, **kwargs):
            """
            Update the primary email address on the related User object as well.
            """
            u = self.instance.user
            u.email = self.cleaned_data['email']
            u.save()
            profile = super(ProfileForm, self).save(*args,**kwargs)
            return profileCode language: Python (python)

    надеюсь вернусь к этому вопросу