Задать вопрос

Как передать из python скрипта json для ajax запроса?

Всем привет, прислали тестовое задание, сделать сайт учета студентов, полностью работающего на ajax. Фреймворками пользоваться нельзя. Так вот как передать из python скрипта json для ajax запроса? И как правильно вообще начинать писать без фреймворка?
И какую бд лучше использовать если условия задания такого : Необходимую(ые) таблицу(ы) спроектировать самостоятельно, учитывая условия:
Студентов будет много (порядка 1-2 млн)
Запись в эти таблицы будет вестись в конкурентом режиме доступа
Студенты могут часто переходить из одной группы в другую
Предполагаются частые выборки по фильтрам (включая комбинации): фамилия, группа, семестр, средний балл
  • Вопрос задан
  • 5196 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
un1t
@un1t
Без фреймоврков? Это не прикол?
Я вижу два варианта,
1) самому обрабатывать WSGI вроде это не сильно сложно, но понадобиться еще например uwsgi и nginx. Вобще кажется не очень удобно убедет с этим возится.
2) написать свой http сервер. Например отнаследоваться от SimpleHTTPServer , вот пример.

Что касается БД, то впринципе без разницы возьми одну из этих, какую лучше знаешь MySQL / Postgres / MongoDB. Хотя если упоминается слово "таблицы" явно намек на реляционную, так что монгу вычеркиваем.

Для фильтров просто индексы нормально подобрать и все.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Кгхм. Тестовое задание - это ведь такая штука, которая используется для того, чтобы оценить уровень знаний и компетенцию, да?
Ответ написан
sumej
@sumej
DevOps
>сделать сайт учета студентов
учёт оценок? посещаемости?
>И какую бд лучше использовать если условия задания такого
>Предполагаются частые выборки по фильтрам (включая комбинации): фамилия, группа, семестр, средний балл
Поиск можно и через сфинкс можно и через майскуэль Полнотекстовый поиск и его возможности


>Студенты могут часто переходить из одной группы в другую
Не нагрузка.
>Предполагаются частые выборки по фильтрам (включая комбинации): фамилия, группа, семестр, средний балл
>Студентов будет много (порядка 1-2 млн)
Если sql не справляется на SELECT. Тогда нужно будет думать =)

>И как правильно вообще начинать писать без фреймворка?
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
from os import curdir, sep

PORT_NUMBER = 8080

#This class will handles any incoming request from
#the browser 
class myHandler(BaseHTTPRequestHandler):
	
	#Handler for the GET requests
	def do_GET(self):
		if self.path=="/":
			self.path="/index_example2.html"

		try:
			#Check the file extension required and
			#set the right mime type

			sendReply = False
			if self.path.endswith(".html"):
				mimetype='text/html'
				sendReply = True
			if self.path.endswith(".jpg"):
				mimetype='image/jpg'
				sendReply = True
			if self.path.endswith(".gif"):
				mimetype='image/gif'
				sendReply = True
			if self.path.endswith(".js"):
				mimetype='application/javascript'
				sendReply = True
			if self.path.endswith(".css"):
				mimetype='text/css'
				sendReply = True

			if sendReply == True:
				#Open the static file requested and send it
				f = open(curdir + sep + self.path) 
				self.send_response(200)
				self.send_header('Content-type',mimetype)
				self.end_headers()
				self.wfile.write(f.read())
				f.close()
			return


		except IOError:
			self.send_error(404,'File Not Found: %s' % self.path)

try:
	#Create a web server and define the handler to manage the
	#incoming request
	server = HTTPServer(('', PORT_NUMBER), myHandler)
	print 'Started httpserver on port ' , PORT_NUMBER
	
	#Wait forever for incoming htto requests
	server.serve_forever()

except KeyboardInterrupt:
	print '^C received, shutting down the web server'
	server.socket.close()

>Запись в эти таблицы будет вестись в конкурентом режиме доступа. Возможно нужно будет использовать блокировки либо всю работу спрятать в транзакции sql:
import threading
class Repository:
    def __init__(self):       
        self.__lock=threading.Lock()
   def add(self):
       with self.__lock:
            with open(self.config_path,"r") as json_data:
                try:
                    data = json.load(json_data)
                except:
                    logging.critical( "FATAL!!!can't read %s" % data)
                    raise ValueError("can't json.load(%s)" % data)

import MySQLdb
#Start a connection
db= MySQLdb.connect(host="dbhost", user="dbuser" , passwd="dbpass", db="dbname")
db.autocommit(False)
cursor = db.cursor()
try:
 cursor.execute("Your SQL")
 cursor.execute("Another sql")
 db.commit()
except:
 db.rollback()

запуск uwsgi --ini env.ini того же Flask/Falcon/etc
env.ini:
# it's example how run
[uwsgi]
plugins = python27
http-socket = :80
#pythonpath = /srv/myapp
#virtualenv  = /home/project/ve
chdir = /home/project
processes = 1
threads = 4
#pythonpath = ..
module = manager:app
# This line below was important
#wsgi-file = manager.py
#callable = app
# Turn this off for production
catch-exceptions = true
stats = /.tmp/.uwsgi-stats.socket
touch-reload = /.tmp/.uwsgi-reload
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 14:07
15000 руб./за проект
22 дек. 2024, в 13:01
50000 руб./за проект
22 дек. 2024, в 10:44
15000 руб./за проект