Search code examples
pythonpyramid

How to negate match_param on python? (pyramid)


I want to be able to load the (localhost:6543/users),

enter image description here

it doesn't load because it requires a second parameter (ex. localhost:6543/users/x).

enter image description here

I'm aware of the problem, it is because I set it on my route.

config.add_route('users', '/users/{action}')

Here is my init.py

def includeme(config):
    config.add_static_view('user_static', 'user:static', cache_max_age=3600)
    config.add_static_view('static', 'user:static', cache_max_age=3600)
    config.add_route('users', '/users/{action}')
    config.scan()

here is my views.py

class UserView:

def __init__(self, request):
    self.request = request

@view_config(route_name='users', renderer='templates/users.jinja2')
def users(self):
    return {'title': 'Users'}


@view_config(route_name='users', renderer='json', match_param='action=list')
def list(self):
    #return list   

@view_config(route_name='users', renderer='json', match_param='action=add')
def add(self):
    #add new user

@view_config(route_name='users', renderer='json', match_param='action=getUser')
def getUser(self):
   #retrieve data for update

@view_config(route_name='users', renderer='json', match_param='action=updateUser')
def updateUser(self):
    #update record

Thank you for those who will answer, if you can give some improvements on my code, please tell me.


Solution

  • I think I should use another route for all of my action here.

    def includeme(config):
        config.add_static_view('user_static', 'user:static', cache_max_age=3600)
        config.add_static_view('static', 'user:static', cache_max_age=3600)
        config.add_route('users', '/users')
        config.add_route('action', '/action/{action}')
        config.scan()
    

    and modify the views, change users to action.

    class UserView:
    
    def __init__(self, request):
        self.request = request
    
    @view_config(route_name='users', renderer='templates/users.jinja2')
    def users(self):
        return {'title': 'Users'}
    
    
    @view_config(route_name='action', renderer='json', match_param='action=list')
    def list(self):
        #return list   
    
    @view_config(route_name='action', renderer='json', match_param='action=add')
    def add(self):
        #add new user
    
    @view_config(route_name='action', renderer='json', match_param='action=getUser')
    def getUser(self):
        #retrieve data for update
    
    @view_config(route_name='action', renderer='json', match_param='action=updateUser')
    def updateUser(self):
        #update record