понедельник, 31 марта 2014 г.

вторник, 25 марта 2014 г.

Альтернатива notepad++ для Mac OS

Добго шукав альтернативу notepad'a під Маком. Ось він TextWrangler Декілька скріншотів:


понедельник, 28 сентября 2009 г.

Авторизация с использованием E-mail

Доброго времени суток!
Иногда нужно сделать авторизацию, чтобы вместо логина был его е-мейл. Я сделал это так:

def authoritation_ajax(request):
if request.method == u'POST':
#получаем методом пост юзернейм(помним что юзернейм это мыло юзера ) и пароль
username = request.POST['username']
password = request.POST['password']
#попытаемся получить с таким мылом юзера, если удалось усьо ОК если нет то нафиг
try:
user = User.objects.get(email=username)
#проверяем пароль
if user.check_password(password):
#усли удалось проверить пароль, тогда
user = auth.authenticate(username=user.username, password=password)
#ну и авторизируем юзера
auth.login(request, user)
if user.is_authenticated():
soob = {'soob':user.id}

else:
soob = {'soob':"No pass"}
except User.DoesNotExist:
soob = {'soob':None}
#здесь мы генерим json для аякса
soob = simplejson.dumps(soob)
return http.HttpResponse(soob, mimetype='application/json')

четверг, 24 сентября 2009 г.

Капча средсвами django и jQuery


Решился придумать велосипед  и прикрутить к  django капчу.
И так начнём.
Файл captcha.py:

# -*- coding: utf-8 -*-
from PIL import Image, ImageDraw, ImageFont
#импортируем наши настройки
from django.conf import settings
from climat.settings import *
def captcha(request):
    # случайный генератор
    from random import choice
    #  sha для генератора хэша
    import sha, os
   
    # создаём 5 случайных знаков + секретный ключ
    SALT = settings.SECRET_KEY[:20]
    imgtext = ''.join([choice('qwertyupasdfghjkzxcvbnm123456789') for i in range(5)])
    # наш хэш
    imghash = sha.new(SALT+imgtext).hexdigest()
    # открываем нашу картинку заднего фона средствами  PIL
    # settings.BACKGROUND_IMG_KAPTCHA в сетингах прописываем нашу картинку-бэграунд
    im=Image.open(settings.BACKGROUND_IMG_KAPTCHA)
    draw=ImageDraw.Draw(im)
    #в сеттингах прописываем путь к нашему шрифту для капчи
    font=ImageFont.truetype(settings.BACKGROUND_FONT_KAPTCHA, 57)
    #пишем на нашей картинке текст
    draw.text((10,5), imgtext, font=font, fill=(100,100,50))
    # для имени картинки исрользую ІР юзера
    temp =os.path.join(settings.PROJECT_DIR, "media/"+request.META['REMOTE_ADDR']+".jpg" )
   
    tempname = request.META['REMOTE_ADDR']+'.jpg'
    im.save(temp, format='JPEG')
    #возвращаем хэш катринки и название картинки
    arr = { 'imghash': imghash, 'tempname':tempname  }
    return arr



Файл views.py:

#ф-ция, где будет выводиться наша капча
def newses(request,offset):
    #наш темлейт
    template = 'newses.html'
    news = News.objects.get(id=int(offset))
    from climat.core.captcha import captcha
    captcha = captcha(request)
    if request.user.is_authenticated():
        user = request.user
    return render_to_response(template, { 'news':news, 'user':user, 'captcha':captcha })

#ф-ция, для аякса

def ajax_send_comments(request):
    res = {'success':False}
    if request.method == u'POST':
        POST = request.POST
        object_type = POST['object_type']
        object_id = POST['object_id']
        user_id = POST['user_id']
        comment = POST['comment']
        imghash = POST['imghash']
        imgtext = POST['imgtext']
        from django.contrib.comments.models import Comment
        import datetime, sha
       
        SALT = SECRET_KEY[:20]
        if imghash == sha.new(SALT+imgtext).hexdigest():
            c = Comment(
                        user_id = int(user_id),
                        comment = comment,
                        submit_date = datetime.date.today(),
                        ip_address = request.META.get("REMOTE_ADDR", None),
                        content_type_id = int(object_type),
                        object_pk = object_id,
                        site_id = 1
                        )
            c.save()
        res = { 'ip': request.META.get("REMOTE_ADDR", None), 'object_type':object_type, 'object_id':object_id, 'user_id':user_id, 'comment':comment, 'imgtext':imghash, 'sha':sha.new(SALT+imgtext).hexdigest()  }
        res = simplejson.dumps(res)
       
    return http.HttpResponse(res, mimetype='application/json')


Файл 'newses.html:

{% extends "base.html" %}
{% block title %} Activation {% endblock %}
<script type="text/javascript" src="/media/js/jquery-1.3.2.min.js">script>
{% block extra_scripts %}
<script type="text/javascript" src="/media/js/newses.js">script>
<link href="/media/css/news.css" rel="stylesheet" type="text/css" media="screen" />
{% endblock %}
{% block content %}
      {% load multilingual_tags %}
     
      {{ news.title }}
      {% load comments %}
      {% get_comment_list for news as allcomments %}
      {% for acomment in allcomments %}
       <b> <div class="meta"><a href="{{ acomment.user_url }}">{{ acomment.user_name }}a>: {{ acomment.comment }}div>b>
       <input type="button" onclick="" value="com_com"  />
      <br/>
     <div class="form_comment" id="form_comment">
            <input name="object_type" value="10" id="object_type" type="hidden">
            <input name="object_id" value="{{news.id}}" id="object_id" type="hidden">
            <input name="user_id" value="{{user.id}}" id="user_id" type="hidden">
            <input type="hidden" value="{{ captcha.imghash }}" name="imghash" id="imghash" >
            <p>
              <label for="comment">Commentlabel>
              <textarea id="comment" rows="10" cols="40" name="comment">textarea>
            p>
            <p>
                  <input type="text" size="20" name="imgtext" id="imgtext"><br />
                        <img src="/media/{{ captcha.tempname }}"><br />
            p>
              <p class="submit">
                <input name="post" class="submit-post" value="Post" type="button" onclick="send_comments()">
              p>
      div>
    <input type="button" onclick="view_comments_panel()" value="com_news"  />  
    {% endfor %}
{% endblock %}

Файл newses.js
function view_comments_panel(  ){
      $('#form_comment').show();
}

function send_comments(){
      if($('#comment').val().length > 2){
            $.post("/ajax/send_comments/",
                  {
                        object_type : $('#object_type').val(),
                        object_id : $('#object_id').val(),
                        user_id : $('#user_id').val(),
                        comment : $('#comment').val(),
                        imghash : $('#imghash').val(),
                        imgtext : $('#imgtext').val()
                  },
                  function(data){
                        alert(data.imgtext+' r '+ data.sha);
                  },'json'
            );
      }
}