1) На сколько верным было решением использовать node.js и mongo?
3) Сайтов у компании - масса, большая часть которых - лэндинги на чистых html с php-скриптом на почту. Все заказы ссылаются на единый gmail-ящик. Можно ли грабить эти данные из ящика, чтобы отправлять их в облако?
4) Какие существуют удобные облачные сервисы, которые предоставляют API для node.js?
5) Какова примерная стоимость подобного проекта в $ ?
1) Box catBox; // объявили переменную с типом Box и именем catBox (просто объявили, в ней ничего нет)
2) new Box(); // создали новый объект типа Box (и бросили)
3) catBox = new Box(); // создали новый объект типа Box и сказали, что с ним можно пообщаться используя 3) переменную catBox
4) Box catBox = new Box(); // объявили переменную и сразу с ней связали объект
from django.apps import AppConfig
class FacesetConfig(AppConfig):
name = 'faceset'
verbose_name = "Что-то твое на русском на родном"
class Timetables(models.Model):
name = models.CharField(u'time', max_length=30)
class Meta:
verbose_name = 'Что-то твое на русском на родном'
verbose_name_plural = 'Что-то твое на русском на родном'
def __str__(self):
return self.name
def messages(request):
return {
'messages': get_messages(request),
'DEFAULT_MESSAGE_LEVELS': DEFAULT_LEVELS,
}
...
def get_messages(request):
if hasattr(request, '_messages'):
return request._messages
else:
return []
class MessageMiddleware(MiddlewareMixin):
def process_request(self, request):
request._messages = default_storage(request)
...
def default_storage(request):
return import_string(settings.MESSAGE_STORAGE)(request)
...
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
messages.error(request, 'Ваш диапазон дат занят для данного объекта.')
def error(request, message, extra_tags='', fail_silently=False):
add_message(request, constants.ERROR, message, extra_tags=extra_tags,
fail_silently=fail_silently)
...
def add_message(request, level, message, extra_tags='', fail_silently=False):
if not isinstance(request, HttpRequest):
raise TypeError("add_message() argument must be an HttpRequest object, "
"not '%s'." % request.__class__.__name__)
if hasattr(request, '_messages'):
return request._messages.add(level, message, extra_tags) # *** THIS ***
if not fail_silently:
raise MessageFailure('You cannot add messages without installing '
'django.contrib.messages.middleware.MessageMiddleware')
def add(self, level, message, extra_tags=''):
if not message:
return
level = int(level)
if level < self.level:
return
# Add the message.
self.added_new = True
message = Message(level, message, extra_tags=extra_tags)
self._queued_messages.append(message)
...
def _get_level(self):
if not hasattr(self, '_level'):
self._level = getattr(settings, 'MESSAGE_LEVEL', constants.INFO)
return self._level
# settings.py
...
MY_SUPER_ERROR = 80
MESSAGE_LEVEL = MY_SUPER_ERROR
...
if not available_cars:
carstoshow = None
messages.add_message(request, settings.MY_SUPER_ERROR, 'Ваш диапазон дат занят для данного объекта.')
return redirect('car_detail', pk=car_used_id)
# In forms.py...
from django import forms
class UploadFileForm(forms.Form):
title = forms.CharField(max_length=50)
file = forms.FileField()
from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import UploadFileForm
def upload_file(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return HttpResponseRedirect('/success/url/')
return render(request, 'upload.html', {'form': form})
else:
form = UploadFileForm()
return render(request, 'upload.html', {'form': form})
class UserRegistrationForm(forms.ModelForm):
password = forms.CharField(label='Password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Repeat password', widget=forms.PasswordInput)
class Meta:
model = User
fields = ('username', 'first_name', 'email')
def clean_password2(self):
cd = self.cleaned_data
if cd['password'] != cd['password2']:
raise forms.ValidationError('Passwords don\'t match.')
return cd['password2']
def register(request):
if request.method == 'POST':
user_form = UserRegistrationForm(request.POST)
if user_form.is_valid():
# Create a new user object but avoid saving it yet
new_user = user_form.save(commit=False)
# Set the chosen password
new_user.set_password(user_form.cleaned_data['password'])
# Save the User object
new_user.save()
profile = Profile.objects.create(user=new_user)
return redirect('/account/login/')
else:
user_form = UserRegistrationForm()
return render(request, 'account/register.html', {'user_form': user_form})
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL)
position_lat = models.DecimalField(decimal_places=8, max_digits=10, verbose_name="Широта")
position_long = models.DecimalField(decimal_places=8, max_digits=10, verbose_name="Довгота")
def __str__(self):
return 'Profile for user {}'.format(self.user.username)
private void button1_Click(object sender, EventArgs e)
{
conpoezdb.Open();
SqlDataAdapter SDA = new SqlDataAdapter("INSERT INTO train(number,place, count, data, time)VALUES ('" + textBox1.Text + "', '" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "')", conpoezdb);
SDA.SelectCommand.ExecuteNonQuery();
conpoezdb.Close();
MessageBox.Show("saved");
updateView();
}
private void button4_Click(object sender, EventArgs e)
{
updateView();
}
private void updateView()
{
conpoezdb.Open();
SqlDataAdapter SDA = new SqlDataAdapter("SELECT * FROM train", conpoezdb);
DataTable data = new DataTable();
SDA.Fill(data);
dataGridView1.DataSource = data;
conpoezdb.Close();
}
private void button1_Click(object sender, EventArgs e)
{
conpoezdb.Open();
//пишем в бд
SqlDataAdapter SDA = new SqlDataAdapter("INSERT INTO train(number,place, count, data, time)VALUES ('" + textBox1.Text + "', '" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "')", conpoezdb);
SDA.SelectCommand.ExecuteNonQuery();
//запрашиваем по новой
SqlDataAdapter SDA = new SqlDataAdapter("SELECT * FROM train", conpoezdb);
conpoezdb.Close();
DataTable data = new DataTable();
SDA.Fill(data);
dataGridView1.DataSource = data;
MessageBox.Show("saved");
}
vendor.product_set.count()
class Product(models.Model):
vendor = models.ForeignKey(Vendor, related_name='products')
some_vendor.products.all()
some_vendor.products.filter(key=value)
some_vendor.products.create(your=params) # Создаст продукт с уже заполненым полем vendor=some_vendor
class Message(Model):
sender = ForeignKey(User)
recipient = ForeignKey(User)
text = TextField()
class Message(Model):
sender = ForeignKey(User, related_name='sent_messages')
recipient = ForeignKey(User, related_name='received_messages')
text = TextField()
разнести настройки "по категориям"Никогда такой надобности не было
foo='bar'
from settings1.py import *
зависимости от environment, например, db.py разный для prod\dev\test
myprog
├── manage.py
└── myprog
├── __init__.py
├── settings
│ ├── __init__.py
│ ├── global.py
│ └── settings_test.py
├── urls.py
└── wsgi.py
import os
if os.environ['test']:
from settings_test.py import *
# common settings for all env types
from global.py import *
foo='buzz'