Advance

We have lot of features to look into if we really want to achieve more using pytonik, I will choose to be a web developer and I want to be very good in web development, but before I can become more better, I need to know how to go about using all the modules provided by pytonik. Knowing how to used will not make me better but limited. I think I need to improved and break my limit but now how can I break my limit. The best way to do so, is to know how to create my own custom model and controller. Great, I believe I can now start developing scalable web application.

Model

Model, is breaking application into parts, in which each part as it model and can as well relate to another part. Let say we have a model that is called Users, and Result, these models are closely related, each model cannot do without other. We will like to talk more about how to work with model but making a real live example will explain better. Model are created and saved into model folder. We will need to import Model and inherit Model properties into our newly created model. below example will explained better.

Example: Users.py

from pytonik.Model import Model

class Users(Model):

        def __getattr__(self, item):
                return item

        def __init__(self):
                return None

        def get(self, userid=""):
                returns "user"

        def list(self):
                return "all user"

        def delete(self, id=""):
                if id is not "":
                        return "delete user with id"
                else:
                        return "delete  all user"

Example 1.0: Result.py

from pytonik.Model import Model

class Result(Model):

        def __getattr__(self, item):
                return item

        def __init__(self):
                return None

        def get(self, userid=""):
                return "user result"

        def list(self):
                return "all result"

        def deletebyuser(self, userid="", id=""):
                if userid is not "" and id is not "":
                        return "delete user result that as id"
                else:
                        return "delete user result"

        def delete(self, id=""):
                if id is not "":
                        return "delete  result with id"
                else:
                        return "delete  all result"

I will like to know more, at this stage I found the example very interesting, now that I have learnt how to create model, feel I am still missing out, because I need to learn how to implement database query. Pytonik has an hand build schema that will handle all database features. In our case we will use Schema method and attribute, this module was design to enhance database structuring. Since we are using Model Module we should be comfortable using database properties without calling or importing another module. if you have not learn more about pytonik Schema, I prefer you should to read more about how to use it because you will need it in the future if not now.

Example 1.1: Result.py

from pytonik.Model import Model

class Result(Model):

   def __getattr__(self, item):
        return item

   def __init__(self):
        self.result = self.table('result')
        return None

   def get(self, userid=""):
       query= self.result.where('users_id','=',userid).select().get()
       return query.rowCount, query.result

   def list(self):
       query= self.result.select().get()
       return query.rowCount, query.result


   def deletbyuser(self, userid="", id=""):
        if userid is not " and id is not “”:
            query = self.result.where('users_id','=',userid).and ('result_id' '=', id).delete()
            return query
        else:
            query = self.result.where('users_id','=',userid).delete()
            return query

  def delete(self, id=""):
        if id is not "":
            query = self.result.where('result_id','=',id).delete()
            return query
        else:
            query = self.result.delete()
            return query

Controller

Controller is the heart of the application, it is the most important part of application and can function without the help of model, but the model cannot function without controller. The controller handles the result and send action in and out of the application. Controller controls and send data to the browser using the help of view which is a method in App module. All controller files are stored in controller folder and are saved/stored in Capitalized form example UsersController.py. if file is saved userscontroller.py or Userscontroller.py are not accepted and will definitely lead to exception.

Example: UsersController.py

The illustration shows how to create controller and implement views module, which is one of the property of App module, as you can see we are sending data user.html which is stored in our views folder in our project directory.

from pytonik.App import App

mvc = App()

def index():

data = {
'title': "pytonik MVC",
'label': "List Pytonik Users”

}
mvc.views('user', data)

Example: user.html

Here we can see that we are can display variable in user.html sent from UsersController.py

<html>

<head>
<title>{{title}}</title>
</head>

<body>

    <h1>{{label}}</h1>

</body>

</html>

How to load ``model`` in ``controller``

Example 1.0: load model Users.py into controller UsersController.py

once Users model load into UsersController it gives Controller access to all the methods and attribute in Users model. we can call each of the method defined in Users

from pytonik.App import App
from pytonik.Model import Model

mvc = App()
users = Model.Load('Users')

def index():

data = {
'title': "pytonik MVC",
'label': "List Pytonik Users”

}
mvc.views('user', data)

Note

if we keep importing module each time we want to make use of them, then we will write a huge lines of codes which is not what we want. pytonik has a module called Web, it gives access to bunch of modules, so we will not have to be importing module into our controller. below example will explain.

Example 1.1: load model Users.py into controller UsersController.py . load is a method in Model module

from pytonik import Web

mvc = Web.App()
users = Web.Load('Users')

def index():

data = {
'title': "pytonik MVC",
'label': "List Pytonik Users”

}
mvc.views('user', data)

Note

App Module has three important methods header is called when displaying strings or characters, redirect from initial page to the preferred page. referer from initial to the previous page.

header method has type argument with default value text/html.

Example:

from pytonik import Web
mvc = Web.App()

def index():

    mvc.header()

    print("i love pytonik")

redirect method has location argument with default value /.

Example 1.0:

from pytonik import Web
mvc = Web.App()

def index():
    mvc.redirect('/login')

Example 1.1: Using url function together with redirect method

from pytonik import Web
mvc = Web.App()

def index():

    mvc.redirect(Web.url('/login'))

referer method has location argument with default value /.

Example 1.0:

from pytonik import Web
mvc = Web.App()

def index():
    mvc.referer()

Note

Cases where referer page does not exist, set an alternative location referer('home'). Let say the previous page is not found, we have to provide an alternative location. This means we are directing to home page

Example 1.1: Using url function together with referer method

from pytonik import Web
mvc = Web.App()

def index():

    mvc.referer(Web.url('/home'))