গুগল অ্যাপ ইঞ্জিনের জন্য প্রকল্প কাঠামো


119

প্রযুক্তিটি নিয়ে খেলতে এবং একটি পোষা প্রাণীর প্রকল্পে কাজ করার জন্য আমি Google অ্যাপ ইঞ্জিনে ঠিক তখনই একটি অ্যাপ্লিকেশন শুরু করেছি যা আমি দীর্ঘকাল ধরে ভাবছিলাম কিন্তু কখনই শুরু করার মতো লক্ষ্য অর্জন করি নি। ফলাফলটি বোলসকে । তবে, এটি যেমন বৃদ্ধি পেয়েছে এবং বৈশিষ্ট্যগুলি যুক্ত করা হয়েছে, জিনিসগুলিকে সুসংহত রাখা সত্যিই কঠিন হয়ে পড়েছে - মূলত এটি আমার প্রথম অজগর প্রকল্প, এবং কাজ শুরু করা পর্যন্ত আমি এ সম্পর্কে কিছুই জানতাম না।

আমি কি আছে:

  • প্রধান স্তরে রয়েছে:
    • সমস্ত .py ফাইল (প্যাকেজগুলি কীভাবে কাজ করতে হয় তা জানত না)
    • মূল স্তরের পৃষ্ঠাগুলির জন্য সমস্ত .html টেমপ্লেট
  • সাবডিরেক্টরি:
    • সিএসএস, চিত্র, জেএস ইত্যাদির জন্য পৃথক ফোল্ডার
    • সাব-ডাইরেক্টি-টাইপ ইউআরএলগুলির জন্য .html টেম্পলেটগুলি রয়েছে এমন ফোল্ডারগুলি

উদাহরণ:
http://www.bowlsk.com/ হোমপেজের মানচিত্র (ডিফল্ট প্যাকেজ), "সূচি html" তে টেমপ্লেট
http://www.bowlsk.com/games/view-series.html?series=7130 মানচিত্র এতে ভিউসারিজপেজ (আবার, ডিফল্ট প্যাকেজ), "গেমস / ভিউ-সিরিজ। Html" এ টেমপ্লেট

এটা খারাপ। আমি কীভাবে পুনর্গঠন করব? আমার 2 টি ধারণা ছিল:

  • মূল ফোল্ডারযুক্ত: অ্যাপডিফ, সূচকগুলি, মেইনপি?

    • কোডের জন্য সাবফোল্ডার। এটি কি আমার প্রথম প্যাকেজ হতে হবে?
    • টেমপ্লেটগুলির জন্য সাবফোল্ডার। ফোল্ডার হেরেরচি প্যাকেজ উত্তরাধিকারের সাথে মেলে
    • সিএসএস, চিত্র, জেএস ইত্যাদির জন্য পৃথক সাবফোল্ডার
  • মূল ফোল্ডারটিতে অ্যাপডিফ, সূচকগুলি, মেইন.পি?

    • কোড + টেমপ্লেটগুলির জন্য সাবফোল্ডার। এইভাবে আমার কাছে টেমপ্লেটের ঠিক পাশেই হ্যান্ডলার ক্লাস রয়েছে, কারণ এই পর্যায়ে, আমি প্রচুর বৈশিষ্ট্য যুক্ত করছি, সুতরাং একটিকে অন্যটিতে পরিবর্তন করতে হবে। আবার, এই ফোল্ডারটির নামটি কি আমার ক্লাসের জন্য প্রথম প্যাকেজের নাম হতে হবে? আমি ফোল্ডারটি "এসসিআর" হতে চাই, তবে আমি চাই না আমার ক্লাসগুলি "এসআরসি।

একটি ভাল অনুশীলন আছে? দিগন্তে দিগঙ্গো ১.০ সহ, সরকারী জিএই টেম্প্লেটিং ইঞ্জিন হয়ে যাওয়ার সাথে সাথে এর সংহত করার আমার দক্ষতা উন্নত করতে এখন আমি কি কিছু করতে পারি? আমি কেবল এই বিষয়গুলির চেষ্টা শুরু করব এবং যা দেখতে আরও ভাল বলে মনে হচ্ছে, কিন্তু পাইডিভের রিফ্যাক্টরিং সমর্থন প্যাকেজ চলনগুলি খুব ভালভাবে পরিচালনা করছে বলে মনে হয় না, তাই সম্ভবত এই সমস্ত কাজ করা এখন একটি অ-তুচ্ছ কাজ হবে।

উত্তর:


104

প্রথমত, আমি সুপারিশ করবে আপনি "কটাক্ষপাত আছে পাইথন, জ্যাঙ্গো, এবং Google App ইঞ্জিন সঙ্গে দ্রুত উন্নয়ন "

জিভিআর তার স্লাইড উপস্থাপনার 10 পৃষ্ঠায় একটি সাধারণ / মানক প্রকল্পের বিন্যাস বর্ণনা করে

এখানে আমি পৃষ্ঠাটি থেকে বিন্যাস / কাঠামোর কিছুটা পরিবর্তিত সংস্করণ পোস্ট করব। আমি বেশ নিজেকে এই প্যাটার্ন অনুসরণ। আপনি প্যাকেজগুলি নিয়ে সমস্যা হয়েছে বলেও উল্লেখ করেছিলেন। কেবলমাত্র আপনার প্রতিটি সাব ফোল্ডারে একটি __init__.py ফাইল রয়েছে তা নিশ্চিত করুন। খালি থাকলে ঠিক আছে।

বয়লারপ্লেট ফাইল

  • প্রকল্পগুলির মধ্যে এগুলি খুব কমই পৃথক হয়
  • app.yaml: সমস্ত অ স্থিতিশীল অনুরোধগুলি main.py এ সরাসরি করুন
  • main.py: অ্যাপ্লিকেশন আরম্ভ করুন এবং সমস্ত অনুরোধ প্রেরণ করুন

প্রজেক্ট লে-আউট

  • স্ট্যাটিক / *: স্ট্যাটিক ফাইল; অ্যাপ্লিকেশন ইঞ্জিন দ্বারা সরাসরি পরিবেশন করা
  • myapp / *। পাই: অ্যাপ্লিকেশন নির্দিষ্ট পাইথন কোড
    • ভিউ.পি, মডেল.পি, টেস্ট.পি, __init__.py এবং আরও অনেক কিছু
  • টেমপ্লেট / *। এইচটিএমএল: টেমপ্লেট (বা মায়াপ / টেম্পলেট / *। এইচটিএমএল)

এখানে কিছু কোড উদাহরণ রয়েছে যা পাশাপাশি সহায়তা করতে পারে:

main.py

import wsgiref.handlers

from google.appengine.ext import webapp
from myapp.views import *

application = webapp.WSGIApplication([
  ('/', IndexHandler),
  ('/foo', FooHandler)
], debug=True)

def main():
  wsgiref.handlers.CGIHandler().run(application)

myapp / views.py

import os
import datetime
import logging
import time

from google.appengine.api import urlfetch
from google.appengine.ext.webapp import template
from google.appengine.api import users
from google.appengine.ext import webapp
from models import *

class IndexHandler(webapp.RequestHandler):
  def get(self):
    date = "foo"
    # Do some processing        
    template_values = {'data': data }
    path = os.path.join(os.path.dirname(__file__) + '/../templates/', 'main.html')
    self.response.out.write(template.render(path, template_values))

class FooHandler(webapp.RequestHandler):
  def get(self):
    #logging.debug("start of handler")

myapp / models.py

from google.appengine.ext import db

class SampleModel(db.Model):

আমি মনে করি এই লেআউটটি নতুন এবং অপেক্ষাকৃত ছোট থেকে মাঝারি প্রকল্পের জন্য দুর্দান্ত কাজ করে। বৃহত্তর প্রকল্পগুলির জন্য আমি মতামত এবং মডেলগুলির নিজস্ব উপ-ফোল্ডারগুলি এমন কিছুর সাথে যুক্ত করার পরামর্শ দেব:

প্রজেক্ট লে-আউট

  • স্ট্যাটিক /: স্ট্যাটিক ফাইল; অ্যাপ্লিকেশন ইঞ্জিন দ্বারা সরাসরি পরিবেশন করা
    • JS / *। JS
    • ইমেজ / * GIF |। PNG | JPG
    • CSS / *। CSS
  • myapp /: অ্যাপ স্ট্রাকচার
    • মডেল / *। PY
    • মতামত / *। PY
    • পরীক্ষা / *। PY
    • টেমপ্লেট / *। এইচটিএমএল: টেমপ্লেট

2
আপনি একবার 20 বা 30 টি ভিউ পেয়েছেন এবং এমন একটি দম্পতি "দর্শন" যা কেবল পোস্টগুলি পরিচালনা করে এবং তারপরে পুনঃনির্দেশিত হয়, আপনি কি তাদের আলাদা ফাইলগুলিতে বিভক্ত করবেন? সম্ভবত মাইয়াপ / ভিউ / ভিউ 1.py, মায়াপ / ভিউ / ভিউ 2.py এ? বা এটি কেবল আমার জাভা / সি # পটভূমির মাধ্যমে দেখা যাচ্ছে?
ক্রিস মারাস্তি-জর্জি

1
বড় প্রকল্পগুলিকে সম্বোধন করার জন্য আমি আমার পোস্টটি সম্পাদনা করেছি। আমি আশা করি এটি সাহায্য করবে. মনে রাখবেন যে কোনও কোনও ক্ষেত্রে এটি রায় হবে।
fuentesjr

1
আমার অনুরূপ লেআউট রয়েছে তবে "ম্যাপ" এর পরিবর্তে "অ্যাপ" ব্যবহার করুন।
আলেকজান্ডার কোজেভনিকিকভ

কেউ কি এই জাতীয় প্রকল্পের বিন্যাসের জন্য একটি কাজের উদাহরণ সরবরাহ করতে পারেন? আমি উপযুক্ত কিছু পাই না।
Herrherr

16

আমার স্বাভাবিক বিন্যাসটি এরকম কিছু দেখাচ্ছে:

  • app.yaml
  • index.yaml
  • অনুরোধ.py - এর মধ্যে মূল ডাব্লুএসজিআই অ্যাপ্লিকেশন রয়েছে
  • liberal এর সংক্ষিপ্ত রূপ
    • __init__.py - অনুরোধ হ্যান্ডলার বেস ক্লাস সহ সাধারণ কার্যকারিতা
  • কন্ট্রোলার - সমস্ত হ্যান্ডলার রয়েছে। অনুরোধ.আইএমএল এগুলি আমদানি করে।
  • টেমপ্লেট
    • নিয়ামকগণ দ্বারা ব্যবহৃত সমস্ত জ্যাঙ্গো টেম্পলেট
  • মডেল
    • সমস্ত ডেটাস্টোর মডেল ক্লাস
  • স্থির
    • স্ট্যাটিক ফাইল (সিএসএস, চিত্র, ইত্যাদি)। App.yaml দ্বারা / স্থিতিতে ম্যাপ করা হয়েছে

আমি কি আমার app.yaml, request.py, lib / অনুপস্থিত উদাহরণ প্রদান করতে পারেন Init .py, এবং নমুনা নিয়ন্ত্রক, মত চেহারা যদি এই স্পষ্ট নয়।


5
হাই নিক, দয়া করে এটি করুন! আমার পাশাপাশি বিভিন্ন সমাধানের মধ্যে তুলনা করা প্রয়োজন :) আপনাকে ধন্যবাদ!
হোয়াং ফাম

2
হাই, যদি সম্ভব হয় তবে আমি কয়েকটি উদাহরণও দেখতে চাই। ধন্যবাদ।

11

আমি আজ একটি গুগল অ্যাপ ইঞ্জিন বয়লারপ্লেট প্রয়োগ করেছি এবং এটি গিথুবটিতে পরীক্ষা করেছি। এটি উপরের নিক জনসন (যারা গুগলের পক্ষে কাজ করতেন) দ্বারা বর্ণিত রেখাগুলির সাথেই রয়েছে।

এই লিঙ্কটি গে-বয়লারপ্লেট অনুসরণ করুন


1
আপনি এই উত্তর কিছুটা প্রসারিত করতে পারেন? আপনার উত্তরটি সমর্থন করার জন্য গিথুব লিঙ্কটি সমস্ত ভাল এবং ভাল, তবে আপনার এটি অন্তত কিছুটা প্রবর্তনের চেষ্টা করা উচিত।
Shog9

1
গে-বয়লারপ্লেট মূলের README.md এটি সমস্ত ব্যাখ্যা করে। github.com/droot/gae-boilerplate/blob/master/README.md
এড র্যান্ডাল

7

আমি মনে করি প্রথম বিকল্পটি সর্বোত্তম অনুশীলন হিসাবে বিবেচিত হয়। এবং কোড ফোল্ডারটিকে আপনার প্রথম প্যাকেজ তৈরি করুন। গুয়েডো ভ্যান রসম দ্বারা নির্মিত রিটভেল্ড প্রকল্পটি শিখতে খুব ভাল মডেল। এটি একবার দেখুন: http://code.google.com/p/rietveld

জাঙ্গো 1.0 সম্পর্কে, আমি আপনাকে জাজানো বন্দরে নির্মিত জিএই পরিবর্তে জাজানো ট্রাঙ্ক কোডটি ব্যবহার শুরু করার পরামর্শ দিচ্ছি। আবার, রাইটভেল্ডে এটি কীভাবে হয়েছে তা একবার দেখুন।


জ্যাঙ্গো ব্যবহারের সর্বোত্তম কারণ কী? আমি ওয়েব অ্যাপ্লিকেশন ব্যবহার করছি, এবং এটি আমার ঠিক পরিবেশিত হয়েছে। তদ্ব্যতীত, আমি আশা করছি খুব শীঘ্রই গুগল দু'জনের আরও ভাল সংহতকরণের প্রস্তাব দেবে। জ্যাঙ্গো বন্দরে অন্তর্নির্মিত ব্যবহারটি কী?
জামতোদাই

3

আমি ওয়েবপি পছন্দ করি তাই গুগল অ্যাপ ইঞ্জিনে এটিকে টেম্প্লেটিং ফ্রেমওয়ার্ক হিসাবে গ্রহণ করেছি।
আমার প্যাকেজ ফোল্ডারগুলি সাধারণত এইভাবে সংগঠিত হয়:

app.yaml
application.py
index.yaml
/app
   /config
   /controllers
   /db
   /lib
   /models
   /static
        /docs
        /images
        /javascripts
        /stylesheets
   test/
   utility/
   views/

এখানে একটি উদাহরণ।


1

কোড লেআউটের ক্ষেত্রে আমি সর্বশেষতম অনুশীলনগুলিতে পুরোপুরি আপ টু ডেট নই, তবে আমি যখন আমার প্রথম জিএই অ্যাপ্লিকেশনটি করেছি তখন আমি আপনার দ্বিতীয় বিকল্পটি সহ কিছু ব্যবহার করেছি, যেখানে কোড এবং টেমপ্লেটগুলি একে অপরের পাশে রয়েছে।

এর দুটি কারণ ছিল - একটি, এটি কোড এবং টেমপ্লেটটি কাছাকাছি রেখেছিল এবং দ্বিতীয়ত, আমার কাছে ডিরেক্টরি কাঠামো লেআউটটি ওয়েবসাইটের অনুকরণে ছিল - এটি (আমার জন্য) তৈরি করা খুব সহজ ছিল যেখানে সবকিছু ছিল তা মনে রাখবেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.