Git Product home page Git Product logo

crud's Introduction

Build Status Coverage Status Total Downloads Latest Stable Version

Installation

For CakePHP 4.x compatible version:

composer require friendsofcake/crud

For CakePHP 3.x compatible version:

composer require friendsofcake/crud:^5.0

For CakePHP 2.x compatible version:

composer require friendsofcake/crud:~3.0

Introduction

Crud was built to be scaffolding on steroids, and allow developers to have enough flexibility to use it for both rapid prototyping and production applications, even on the same code base -- saving you time.

  • Crud is very fast to install, a few minutes tops.

  • Crud is very flexible and has tons of configuration options.

  • Crud aims to stay out of your way, and if it happens to get in your way, you can change the undesired behavior very easily.

  • Crud relies heavily on CakePHP events and is possible to override, extend, or disable almost all of Crud's functionality either globally or for one specific action.

  • Usually, the basic code for controller CRUD actions are very simple and always looks the same. Crud will add the actions to your controller so you don't have to reimplement them over and over again.

  • Crud does not have the same limitations as CakePHP's own scaffolding, which is "my way or the highway." Crud allows you to hook into all stages of a request, only building the controller code needed specifically for your business logic, outsourcing all the heavy boilerplating to Crud.

  • Less boilerplate code means less code to maintain, and less code to spend time unit testing.

  • Crud allows you to use your own views, baked or hand-crafted, in addition to adding the code needed to fulfill your application logic, using events. It is by default compatible with CakePHP's baked views.

  • Crud also provides built in features for JSON and XML API for any action you have enabled through Crud, which eliminates maintaining both a HTML frontend and a JSON and/or XML interface for your applications -- saving you tons of time and having a leaner code base.

Bugs

If you happen to stumble upon a bug, please feel free to create a pull request with a fix (optionally with a test), and a description of the bug and how it was resolved.

You can also create an issue with a description to raise awareness of the bug.

Features

If you have a good idea for a Crud feature, please join us on IRC/Slack in the #friendsofcake channel and let's discuss it (this is not a support channel). Pull requests are always more than welcome.

Support / Questions

You can use any of CakePHP's support forums/channels for any support or questions.

crud's People

Contributors

aceat64 avatar ad7six avatar admad avatar alysson-azevedo avatar antograssiot avatar bar avatar bcrowe avatar bravo-kernel avatar ceeram avatar curtisgibby avatar dakota avatar davidyell avatar dependabot[bot] avatar dereuromark avatar drmonkeyninja avatar eymen-elkum avatar frankvanhest avatar guidohendriks avatar heat avatar jadb avatar jeanvier avatar jippi avatar johanmeiring avatar josegonzalez avatar lorenzo avatar phally avatar raul338 avatar spriz avatar steefaan avatar waspinator avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

crud's Issues

Crud v4 ApiListener: ValidationException are not getting rendered

When a ValidationException is thrown this is the whole response:

{
    "message": "A validation error occurred",
    "url": "\/...\/965aceed-0f0c-4f04-906c-998fb9a60364.json",
    "code": 412
}

There are no details about the validation error. I think this due to the following facts:

  1. Adding ApiListener to my project does not change the default ExceptionRenderer. I think the problem is registerExceptionHandler() in ApiListener is only changing the configure value for Error.exceptionRenderer. But the ErrorHandler was loaded in bootstrap.php so only the configurations in app.php are consumed.
  2. When I change the ExceptionRender my app.php to Crud\Error\ExceptionRenderer I am getting the following error:
Call to a member function send() on a non-object in \vendor\cakephp\cakephp\src\Error\ErrorHandler.php on line 178

This is due to a missing return in validation($error) in Crud\Error\ExceptionRenderer. If you add

return $this->controller->response; 

everything works fine and validation errors are getting displayed.

CRUD in AJAX

First of all thanks for giving such a wonderful plugin. I have one doubt alone that is, is there any option do crud in AJAX? Kindly share your ideas.

3.0 Undefined property: Crud\Event\Subject::$items

I got this errot trying to modify the results after paginate. Testing with same code as the documentation

public function index() {
  $this->Crud->on('afterPaginate', function(\Cake\Event\Event $event) {
    foreach ($event->subject->items as $item) {
      // $item is an entity
    }
  });

  return $this->Crud->execute();
}
Notice (8): Undefined property: Crud\Event\Subject::$items ...

in the view the results are ok, but I cannot modify these results with the above statement

Stop developing 3.x series of crud

Now that CakePHP 3.x is out, we should implement all 3.x Crud features in 4.x Crud. I noticed we continued to write new features and bugfixes, and while I'll all for fixing bugs, adding features for an older version without re-implementing them for the newer version won't end well.

Thoughts? I can make an initial inventory of what we'd need to re-implement for Crud 4.x and we can work from there :)

4.x) RelatedModelsListener unable to load belongsTo?

Relates to #257

What I'm trying

$this->loadComponent('RequestHandler');
$this->loadComponent('Crud.Crud', [
    'actions' => [
        'index' => [
            'className' => 'Crud.Index',
            'relatedModels' => [
                'Statuses',
//              'Statuses' => 'belongsTo'
            ]
        ],
        'view' => ['className' => 'Crud.View']
    ]
]);

$this->Crud->addListener('Crud.Api');
$this->Crud->addListener('Crud.ApiPagination');
$this->Crud->addListener('Crud.RelatedModels');

I'm then hitting my /api/products.json.

What I'd expect to happen
I would expect that the Statuses table related data would be joined to my returned data.

What is happening?
The data is returned without any additional table data joined.

Why I think it's happening
https://github.com/FriendsOfCake/crud/blob/master/src/Listener/RelatedModelsListener.php#L70
Because this will always equate to a boolean there is no way that any change made to the configuration passed to the component will ever impact this.

So when the getAssociatedByType method is called, the belongsTo relationship is ignored.

Creating custom listener

I'm trying to create a custom listener by following the documentation and I think I'm missing something.

When trying to attach the listener with:

$this->getEventManager()->attach(new DemoListener());

I get a few errors with the first one being:
Argument 1 passed to CrudBaseObject::__construct() must be an instance of CrudSubject, none given

If I attach the listener on a Crud event such as:

    $this->Crud->on('startup', function(CakeEvent $e) {
      $e->subject->controller->getEventManager()->attach(new HamlScaffoldListener($e->subject));
    });

The above error doesn't show up anymore, but the listener doesn't get attached.

Any ideas?

Streamline ApiListener response codes

I think its about time to settle on how the ApiListener should respond to Crud actions :)

Below is my suggestion, based on reference from a few other REST api docs.

One of them was http://www.magentocommerce.com/api/rest/common_http_status_codes.html

afterSave

Success

Response body
     success: true
     data: {
          id: ${record_id}
     }
if $created
     Response code: 201
else
     Response code 200

Error

Response code: 400 Bad Request

Response body:
     success: false
     data: validation errors

Throws an {exceptionClasses.validate} exception

afterDelete

Success

HTTP Code: 200 OK

Response body
     success: true
     data: null

Error

Resposne code: 400 Bad Request

Response body:
     success: false
     data: null

Throws an {exceptionClasses.delete} exception

Support custom messages on create/update

Hello, first things first, I'd like to thank the job done here. But, It would be very cool if there was an easy way to translate the messages after creation/update of a model other than overwriting the Plugin code.

I have created a separate example repo using the blog example. How can I share it here?

Hi there,

I have created a repo that followed the instructions for using the blog example.

https://github.com/simkimsia/cake-with-crud

I will be happy to park it under friendsofcake and maintain it since I am using it as a way to master cake and crud.

I am just wondering where I can add a link to the docs to show people where they can download a fully functional example of it to their localhost.

Currently, I have updated it to work with Cake 2.4.2 and Cake 2.5.

If there are things that are needed to be added to the example, do let me know.

Thank you!

CrudComponent::_handlerClassName() forces listeners to be located in a plugin

If I define a listener in AppController.php without a plugin prefix

public $components = [
        'Crud.Crud' => [
            'actions' => [
                'api_index' => ['index'],
                'api_add' => ['add'],
                'api_view' => ['view'],
                'api_edit'=> ['edit'],
                'api_delete'=> ['delete']
                        ],
            'listeners' => ['ApiCms']
        ],
];

then CrudComponent::_handlerClassName() forces the Crud plugin prefix - which means I have to define a plugin for my custom listener in order to use Crud via composer without having to worry about composer update removing my listener.

I realize that changing this behavior to allow listeners in app would break existing code, but perhaps it can be solved by adding a new option to CrudComponent settings to control if it should add the Crud prefix as before or trust the values as-is?

Custom CrudDeleteViewAction.

// app/Controller/Crud/Action/DeleteViewCrudAction.php

<?php
App::uses('ViewCrudAction', 'Crud.Controller/Crud/Action');
App::uses('DeleteCrudAction', 'Crud.Controller/Crud/Action');
class DeleteViewCrudAction extends ViewCrudAction {

/**
 * HTTP DELETE handler
 *
 * @throws NotFoundException If record not found
 * @param string $id
 * @return void
 */
    protected function _delete($id = null) {
        return DeleteCrudAction::_delete($id); // or similar
    }

/**
 * HTTP POST handler
 *
 * @param mixed $id
 * @return void
 */
    protected function _post($id = null) {
        return DeleteCrudAction::_delete($id); // or similar
    }
}

So obviously this is not working, but it shows what I wanted to achieve:
I wanted to re-use the CRUD magic for GET as well as DELETE/POST to be used by a delete action that either fetches a delete view (to be used with ajax for instance but also without javascript and much nicer than an alert) OR tries to execute the delete.

What's the best approach to do this now?

Error when get RelatedModels Listener

Tried follow doc about RelatedModels

        // Fetch related data from all table relations (default)
        $this->Crud->listener('relatedModels')->relatedModels(true);

Founded a error of unconfigured listener. The correct access to the listener is (work ok):

    // Fetch related data from all table relations (default)
    $this->Crud->listener('relatedmodels')->relatedModels(true);

By convention and look the Listener code it's more correct use de doc way then I think that the CrudComponent::normalizeArray just lowerfy the hole name.

public function __construct(ComponentRegistry $collection, $settings = []) {
...
$name = strtolower($name);

cake3
crud@cake3

Add docs on setting up components in installation.html

User was linked to here from here and the missing $components array confused him. We should add a note in the docs to mention that they will also need this.

Yes, I know, we shouldn't need to, but we do.

Will try to take care of this later if I get a chance but no promises.

Add a listener to make it possible to return updated data from add/edit actions

The response from an edit action is for example:

{
  "success": true,
  "data": {}
}

An optional listener such that the data is populated with the updated data would be useful in some cases.

For example, where the input data is sanitiazed/prepared, or completely transformed (file uploads) and the client would need to know what the updated/saved data looks like. The client could of course immediately request the view of the same resource, but that's one extra api roundtrip.

Unable to setup action map for custom action with underscore.

Tried creating a custom crud action class and map it to an action name get_list.
But CrudComponent::normalizeArray() inflects all action names using Inflector::variable(), so CrudComponent::isActionMapped() is unable to match the action name from request with the action name in crud options.

Implement common API query parameters

I would like to suggest adding an Api feature that will automatically implement some of the more commonly used API query parameters for all index() actions. For example:

  • limit: an int limiting the number of results
  • sort: either 'asc' or 'desc' for the sort-order (using the default sort field)
  • orderby: a non-default fieldname to sort by
  • skip: an int for skipping the first n results

The above would provide the api-requesters with a powerful tool imo because it would allow them to create specific data-collections as they see fit.

Do you guys think this could be a candidate for a feature enhancement? If so, I would be more than happy to start work on it (provided I get some pointers).

3.0 Undefined index: listeners

I got the following error

Undefined index: listeners [ROOT\Plugin\Crud\Controller\Component\CrudComponent.php, line 130]

Trying to use CRUD plugin

 public $components
        = array(
            'Crud.Crud' =>
                array(
                    'actions' => [
                        'Crud.Index',
                        'Crud.Add',
                        'Crud.Edit',
                        'Crud.View',
                        'Crud.Delete'
                    ],
                )
        );

adding listeners => [] after the actions avoid this error, this is a error? or listener is required

Custom Model

Hey Guys,

I am using the plugin for Cake 3.x. I can't find the possibility to set a custom model (table). Maybe that could be i nice feature?

Greetz

RFC - Execute API Listener setFlash

If you do an AJAX DELETE request to delete something and then when it's done just redirect, you don't get the flash message. The app itself works with normal page views and only does AJAX calls for delete requests because it requires one to delete something.

I'd like to change the ApiListener and add a flash setting with three values.

  1. false = Don't flash (default)
  2. true = Always flash
  3. 'ajax' = Only flash on AJAX calls.

Thoughts?

Loading AuthComponent doesn't restrict access

As mentioned to @jippi and @lorenzo when loading both Crud and AuthComponent default methods are not restricted.

http://irc.cakephp.org/logs/link/3270191#message3270201

Jippi: https://github.com/cakephp/cakephp/blob/3.0/src/Controller/Component/AuthComponent.php#L249-L255 CRUD injects into $controller->methods[] array, or should
Jippi: also make sure that add() is actually in that array :)
Jippi: line 254 should return if not, and that could be the root cause

When I don't have an public function add(){} in my UsersController I can access /users/add, but when I add it in the Auth denies access.

Heres some code from my AppController:

<?php
namespace App\Controller;

use Cake\Controller\Controller;
use Cake\Event\Event;

class AppController extends Controller {

    use \Crud\Controller\ControllerTrait;

    public $helpers = [
        'Session',
        'Form' => [
            'className' => 'Chocolate.BootstrapForm'
        ],
        'Html'
    ];

    public $components = [
        'Auth' => [
            'loginAction' => [
                'controller' => 'users',
                'action' => 'login',
            ],
            'loginRedirect' => [
                'controller' => 'users',
                'action' => 'dashboard'
            ],
            'logoutRedirect' => '/',
            'authError' => 'You either need to be logged in, or don\'t have permission to access that.',
            'authenticate' => [
                'Form' => [
                    'fields' => ['username' => 'email']
                ]
            ],
            'authorize' => ['Controller'],
            'flash' => [
                'params' => ['element' => 'flash/danger'],
                'key' => 'well'
            ]
        ],
        'Session',
        'Crud.Crud' => [
            'actions' => [
                'Crud.Index',
                'Crud.Add',
                'Crud.Edit',
                'Crud.View',
                'Crud.Delete'
            ]
        ]
    ];

    public function isAuthorized($user)
    {
        // Admin can access every action
        if (isset($user['role']) && in_array($user['role'], ['admin', 'super_admin']))
        {
            return true;
        }

        // Default deny
        return false;
    }
}

I don't really know much about Crud but I will have a look into this when I get playtime again. :)

Stop to work after last update cake3

After execute composer update commnd the application stop to work.

Maybe it's related with plugins modification released in last commits

Vendor Prefixed Plugins Have Changed
===============================
Plugins that use vendor prefixes e.g: (AcmeCorp\Users) are no longer renamed. Instead of using Users.User, you must now use AcmeCorp/Users.User.
Additionally the vendor prefix will be used as folder name in the plugins folder, so the plugin will be installed in plugins/AcmeCorp/Users folder.

stack - https://gist.github.com/heat/7c4d6fc9669788afb923

3.x ApiPaginationListener not responding to `direction` parameter

The ApiPaginationListener is responding to the direction query string parameter. E.g.

api.local?direction=asc 

Additional info:

  • I have whitelisted the action just as limit, sort and page which do work as expected (all three)
  • I have tested with option order as well
  • using latest Cake 3.x and CRUD

Am I missing something here?

Change saveAll() to saveAssociated() in add / edit

I think we should change saveAll() to saveAssociated()

First of all, we don't really support "saveAll()" with multiple entries of the "primary" model anyway, and I think its a problem that by default 10 posts can be updated or created, something that is not default in scaffold or bake

saveAssociated will allow only the primary model and its related data to be saved, just one, which is what we support now anyway in terms of validation and response formats in API listener.

I would additionally make the save method configurable, so you could change back to saveAll() or CakeDC save style

ApiQueryLogListener inconsistent output structure (Cake3)

Current output on success:

{
"success": true,
"data": ["some kind of other data"],
"queryLog": ["logs are here"]
}

Current output on error:

{
"success": false,
"data": {
    "some kind of other data",
    "queryLog": ["logs are here"]
    }
}

Expected output on error:

{
"success": false,
"data": ["some kind of other data"],
"queryLog": ["logs are here"]
}

Jippi's bot is annoying ;)

screen shot 2015-05-23 at 6 03 12 am

Please! Turn that damn thing off or silence it. It started all of a sudden, and been going at it for weeks now.

3.0 Problems rendering custom view from another plugin

I trying to render a custom view for each CRUD action, but this views are placed in other plugin. Eg.

   use ControllerTrait;

    public $components
        = array(
            'Crud.Crud' =>
                array(
                    'actions' => [
                        'Crud.Index',
                        'Crud.Add',
                        'Crud.Edit',
                        'Crud.View',
                        'Crud.Delete'
                    ]
                )
        );

    function beforeFilter(\Cake\Event\Event $event)
    {
        $this->view = 'Admin./Admin/' . $this->view;
    }

in the beforeFilter try to override the view name in order to use the same view but in other plugin. This works fine only for, edit and add but not works fine with index and view, I found it very strange. reviewing a little more, I found that the argument $view from method render of the controller is always null for index and view actions. My solution to get the expected result is easy, override the render method

public function render($view = null, $layout = null)
{
       return parent::render($this->view, $layout);
}

This is a bug or a normal behavior?, I found a solution but i tell them for your know

Documentation for v3

The docs are for the cakephp 3 branch. Is there a version of the cakephp 2 docs?

"Internal Error Has Occurred" when editing/adding through CRUD

Using the Cake3 CRUD branch with Cake 3.0 alpha release, I receive the following error when adding or editing a record:

Error: An Internal Error Has Occurred.

The record is added to the database. It appears this happens when Crud attempts to set the Flash message.

The top of the stack trace indicates the error occurs in FlashHelper, line 78:

return $this->_View->element($flash['element'], $flash);

My AppController:

<?php

namespace App\Controller;

use Cake\Controller\Controller;

class AppController extends Controller 
{
    use \Crud\Controller\ControllerTrait;

    public $components = [
        'Flash', 
        'Session',
        'Crud.Crud' => [
            'actions' => [ 'Crud.index', 'Crud.add', 'Crud.edit', 'Crud.delete', 'Crud.view' ]
        ]
    ];

    public $helpers = [
        'Flash',
        'Session'
    ];
}

Make allowed request HTTP verbs configurable for actions

FILE: .../jippi/cakephp/app/Plugin/Crud/Controller/Crud/Listener/ApiListener.php
 224 | WARNING | Comment refers to a TODO task "make this configurable on both HTTP verbs and actions"
--------------------------------------------------------------------------------

Make the viewClassMap configurable

FILE: .../jippi/cakephp/app/Plugin/Crud/Controller/Crud/Listener/ApiListener.php
 156 | WARNING | Comment refers to a TODO task "make the viewClassMap configurable"

EditCrudAction duplicating data

If your model returns a field with an array, EditCrudAction will duplicated it. The reason is in this line that I don't get its purpose at all:

$request->data = Hash::merge($request->data, $model->data, $subject->item);

Data in afterFind:

['Entry' => ['comments' => ['bar']]]

Data in beforeRender:

['Entry' => ['comments' => ['bar', 'bar']]

Add a history/changelog action

Would be nice. We may want to dig through the existing logable plugins, choose one, update it, and then add the custom CrudActions there.

Scrutinizer dependency check fails on cake3 crud

Hi guys, I hope this is not caused by a configuration error on my side but my scrutinizer fails on (just) crud. All other dependencies work as expected (including other C3 plugins).

  Notice: Undefined index: cake\event\event in vendor/scrutinizer/php-analyzer/src/Scrutinizer/PhpAnalyzer/Model/Repository/EntityTypeProvider.php line 131  

The details can be found here. Just click on the red cross.

Road to v3 tag

  • Check that documentation is up to date
  • Ensure >= 90% unit test coverage
  • Ensure existing functionality works in a sane manner
  • Verify public API makes sense
  • Make sure the code is easy to test
  • Refactor out dirty bits, if any

Prior to my CakeFest talk ๐Ÿ‘

Deprecated setFlash call.

Hi,
Thereis some issues in file BaseAction

$this->_controller()->Session->setFlash($subject->text, $subject->element, $subject->params, $subject->key);

beforeFilter() should be compatible with

Using the docs for installation and configuration on a superfresh composer update beta 3.0.3, I get the following error:

Strict (2048): Declaration of App\Controller\AppController::beforeFilter() should be compatible with Cake\Controller\Controller::beforeFilter(Cake\Event\Event $event) in [/home/delivered/public_html/src/Controller/AppController.php, line 27] 

Trace: Cake\Error\BaseErrorHandler::handleError() 
- CORE/src/Error/BaseErrorHandler.php, line 135 include 
- APP/Controller/AppController.php, line 27 Composer\Autoload\includeFile 
- ROOT/vendor/composer/ClassLoader.php, line 385 Composer\Autoload\ClassLoader::loadClass() - ROOT/vendor/composer/ClassLoader.php, line 277 spl_autoload_call - [internal], line ?? include - APP/Controller/UsersController.php, line 11 
Composer\Autoload\includeFile - ROOT/vendor/composer/ClassLoader.php, line 385 Composer\Autoload\ClassLoader::loadClass() - ROOT/vendor/composer/ClassLoader.php, line 277 spl_autoload_call - [internal], line ?? class_exists - [internal], line ?? Cake\Core\App::_classExistsInBase() - CORE/src/Core/App.php, line 91 Cake\Core\App::className() - CORE/src/Core/App.php, line 69 Cake\Routing\Filter\ControllerFactoryFilter::_getController() - CORE/src/Routing/Filter/ControllerFactoryFilter.php, line 76 Cake\Routing\Filter\ControllerFactoryFilter::beforeDispatch() - CORE/src/Routing/Filter/ControllerFactoryFilter.php, line 48 Cake\Routing\DispatcherFilter::handle() - CORE/src/Routing/DispatcherFilter.php, line 141 Cake\Event\EventManager::_callListener() - CORE/src/Event/EventManager.php, line 266 Cake\Event\EventManager::dispatch() - CORE/src/Event/EventManager.php, line 233 Cake\Routing\Dispatcher::dispatchEvent() - CORE/src/Event/EventManagerTrait.php, line 75 Cake\Routing\Dispatcher::dispatch() - CORE/src/Routing/Dispatcher.php, line 60 [main] - ROOT/webroot/index.php, line 37

What am I doing wrong?

Hi i'm trying to use Crud for add prymary object and its related Objects

looking in code i try to

public function add() {
        $this->Crud->action()->saveOptions([
            'associated' => ['OrderItems']
        ]);
        return $this->Crud->execute();
    }

and post

{
"customer_id": 32,
"user_id": 1,
"notes": "",
"status": 1,
"orders_items": [
{
"product_id": 3,
"quantity": 1,
"discount": null
},
{
"product_id": 4,
"quantity": 3,
"discount": null
}
]
}

but only the order is saved

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.