Skip to content

Instantly share code, notes, and snippets.

@rutcreate
Created November 10, 2010 05:08
Show Gist options
  • Save rutcreate/670385 to your computer and use it in GitHub Desktop.
Save rutcreate/670385 to your computer and use it in GitHub Desktop.
ExtJS with Django
from django.db import models
class Mail(models.Model):
subject = models.CharField(max_length=255)
message = models.TextField()
sender = models.EmailField()
created = models.DateTimeField(auto_now_add=True)
Ext.onReady(function(){
// Required if showing validation messages
Ext.QuickTips.init();
// Callback send mail.
var sendMail = function() {
if (form.getForm().isValid()) {
form.getForm().submit({
url: '/sendmail',
waitMsg: 'Sending...',
success: function(form, o) {
console.log(o);
Ext.Msg.alert('Success', o.result.msg);
}
});
}
}
var form = new Ext.form.FormPanel({
title: 'Contact Us',
bodyStyle: 'padding:15px',
width: 350,
defaultType: 'textfield',
defaults: {
// applied to each contained item
width: 230,
msgTarget: 'side'
},
items: [{
fieldLabel: 'Subject',
name: 'subject',
allowBlank: false,
labelSeparator: ':' // override labelSeparator layout config
},{
fieldLabel: 'Email',
name: 'email',
allowBlank: false,
vtype:'email'
},{
xtype: 'textarea',
hideLabel: true, // override hideLabels layout config
name: 'message',
allowBlank: false,
anchor: '100% -53'
}],
buttons: [
{text: 'Save', handler: sendMail},
{text: 'Cancel'}
],
layoutConfig: {
//labelSeparator: '~' // superseded by assignment below
},
// config options applicable to container when layout='form':
hideLabels: false,
labelAlign: 'left', // or 'right' or 'top'
//labelSeparator: '>>', // takes precedence over layoutConfig value
labelWidth: 65, // defaults to 100
labelPad: 8 // defaults to 5, must specify labelWidth to be honored
});
var fPanel = new Ext.Panel({
region: 'center',
items: [form]
});
viewport = new Ext.Viewport({
layout: 'border',
items: [fPanel]
});
});
from django.shortcuts import render_to_response
from django.http import HttpResponse
from django.core import serializers
import json
from extjs.mail.models import Mail
def sendmail(request):
# Predefined
_subject = request.POST.get('subject') or ''
_sender = request.POST.get('email') or ''
_message = request.POST.get('message') or ''
_success = True
# Insert object.
if (_subject == '' or _sender == '' or _message == ''):
_success = False
_msg = 'Your data is not enough.'
else:
m = Mail(subject=_subject, sender=_sender, message=_message)
m.save()
_msg = 'We got your message.'
# Return object.
ret = {'success': _success, 'msg': _msg}
return HttpResponse(json.dumps(ret))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment