From 33ff3c5299cbd40bd3bbfd1ffbd79f3e2d518a44 Mon Sep 17 00:00:00 2001 From: Syrus Akbary Date: Wed, 13 Jan 2016 19:21:52 -0800 Subject: [PATCH 1/2] Fixed build error in docs --- docs/package.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/package.json b/docs/package.json index 33820334..694d0ff8 100644 --- a/docs/package.json +++ b/docs/package.json @@ -17,15 +17,17 @@ "copy-webpack-plugin": "^0.2.0", "es6-promise": "^3.0.2", "extract-text-webpack-plugin": "^0.9.1", - "gatsby": "^0.7.3", + "gatsby": "^0.7.7", "graphiql": "^0.4.2", "graphql": "^0.4.13", "jeet": "^6.1.2", "lodash": "^3.10.1", "nib": "^1.1.0", - "react": "^0.14.3", - "react-burger-menu": "^1.4.2", + "react": "^0.14.6", + "radium": "0.14.2", + "react-burger-menu": "^1.4.12", "react-document-title": "^2.0.1", + "react-dom": "^0.14.6", "react-router": "^0.13.5", "rupture": "^0.6.1", "stylus-loader": "^1.4.2", From bbf1392ffd3fe2a0e1c9482db83fa28ca893e342 Mon Sep 17 00:00:00 2001 From: Syrus Akbary Date: Wed, 13 Jan 2016 19:40:13 -0800 Subject: [PATCH 2/2] Improved Django documentation --- docs/config.toml | 9 ++- docs/pages/docs/{ => django}/filtering.md | 25 ++++--- .../tutorial.md} | 68 ++++++++++++++----- 3 files changed, 75 insertions(+), 27 deletions(-) rename docs/pages/docs/{ => django}/filtering.md (94%) rename docs/pages/docs/{quickstart-django.md => django/tutorial.md} (85%) diff --git a/docs/config.toml b/docs/config.toml index 5e39bed6..c1a13ecd 100644 --- a/docs/config.toml +++ b/docs/config.toml @@ -5,7 +5,6 @@ ga = "UA-12613282-7" name = "Quickstart" pages = [ "/docs/quickstart/", - "/docs/quickstart-django/", ] [docs.walkthrough] @@ -16,5 +15,11 @@ ga = "UA-12613282-7" "/docs/mutations/", "/docs/basic-types/", "/docs/relay/", - "/docs/filtering/", + ] + +[docs.django] + name = "Django" + pages = [ + "/docs/django/tutorial/", + "/docs/django/filtering/", ] diff --git a/docs/pages/docs/filtering.md b/docs/pages/docs/django/filtering.md similarity index 94% rename from docs/pages/docs/filtering.md rename to docs/pages/docs/django/filtering.md index 95521dd2..40cc7f1f 100644 --- a/docs/pages/docs/filtering.md +++ b/docs/pages/docs/django/filtering.md @@ -1,9 +1,9 @@ --- -title: Filtering (Django) -description: Details of how to perform filtering +title: Filtering +description: Details of how to perform filtering in Graphene Django --- -# Filtering (Django) +# Filtering Graphene integrates with [django-filter](https://django-filter.readthedocs.org) to provide filtering of results. See the @@ -21,7 +21,7 @@ pip install django-filter ``` **Note: The techniques below are demoed in the -[cookbook example app](https://github.com/graphql-python/graphene/tree/feature/django/examples/cookbook).** +[cookbook example app](https://github.com/graphql-python/graphene/tree/master/examples/cookbook_django).** ## Filterable fields @@ -54,7 +54,10 @@ query { node { id, name -}}}} + } + } + } +} ``` You can also make more complex lookup types available: @@ -76,12 +79,15 @@ Which you could query as follows: ```graphql query { # Note that fields names become camelcased - allAnimals(nameIcontains: "lion") { + allAnimals(name_Icontains: "lion") { edges { node { id, name -}}}} + } + } + } +} ``` ## Orderable fields @@ -112,7 +118,10 @@ query { node { id, name -}}}} + } + } + } +} ``` ## Custom Filtersets diff --git a/docs/pages/docs/quickstart-django.md b/docs/pages/docs/django/tutorial.md similarity index 85% rename from docs/pages/docs/quickstart-django.md rename to docs/pages/docs/django/tutorial.md index 310ec95d..d09b959b 100644 --- a/docs/pages/docs/quickstart-django.md +++ b/docs/pages/docs/django/tutorial.md @@ -1,28 +1,54 @@ --- -title: Django Quickstart +title: Quickstart description: A Quick guide to Graphene in Django --- # Django Tutorial Graphene has a number of additional features that are designed to make -working with Django simple. - -If you need help getting started with django then head over to -Django's getting started page. - -First let's create a few simple models... +working with Django *really simple*. **Note: The code in this quickstart is pulled from the -[cookbook example app](https://github.com/graphql-python/graphene/tree/feature/django/examples/cookbook)**. +[cookbook example app](https://github.com/graphql-python/graphene/tree/master/examples/cookbook_django)**. -## Defining our models -Before continuing, create the following: +## Setup the Django project + +We will setup the project, create the following: * A Django project called `cookbook` * An app within `cookbook` called `ingredients` +```bash +# Create the project directory +mkdir cookbook +cd cookbook + +# Create a virtualenv to isolate our package dependencies locally +virtualenv env +source env/bin/activate # On Windows use `env\Scripts\activate` + +# Install Django and Graphene with Django support +pip install django +pip install graphene[django] +pip install django-graphiql + +# Set up a new project with a single application +django-admin.py startproject cookbook . # Note the trailing '.' character +django-admin.py startapp ingredients +``` + +Now sync your database for the first time: + +```bash +python manage.py migrate +``` + +Let's create a few simple models... + + +## Defining our models + Let's get started with these models: ```python @@ -51,9 +77,9 @@ class Ingredient(models.Model): GraphQL presents your objects to the world as a graph structure rather than a more hierarchical structure to which you may be accustomed. In order to create this representation, Graphene needs to know about each *type* of object which will appear in -the graph. Below we define these as the `UserType` and `GroupType` classes. +the graph. -This graph also has a 'root' through which all access begins. This is the `Query` class below. +This graph also has a *root type* through which all access begins. This is the `Query` class below. In this example, we provide the ability to list all users via `all_users`, and the ability to obtain a specific user via `get_user`. @@ -183,7 +209,7 @@ Installed 6 object(s) from 1 fixture(s) ``` Alternatively you can use the Django admin interface to create some data youself. -You'll need to run the development server (see below), and probably create a login +You'll need to run the development server (see below), and create a login for yourself too (`./manage.py createsuperuser`). ## Testing our GraphQL schema @@ -235,12 +261,17 @@ query { edges { node { name, - ingredients { edges { node { name -}}}}}}} + } + } + } + } + } + } +} ``` Or you can get only 'meat' ingredients containing the letter 'e': @@ -248,9 +279,12 @@ Or you can get only 'meat' ingredients containing the letter 'e': ```graphql query { # You can also use `category: "CATEGORY GLOBAL ID"` - allIngredients(nameIcontains: "e", categoryName: "Meat") { + allIngredients(name_Icontains: "e", categoryName: "Meat") { edges { node { name -}}}} + } + } + } +} ```