mirror of
https://github.com/zulip/zulip.git
synced 2025-10-25 09:03:57 +00:00
new-feature-tutorial: Add references to Django.
With some tweaks by tabbott to update links for our recent documentation migration. Fixes #670.
This commit is contained in:
@@ -8,8 +8,20 @@ data system in real-time to all browsers the user may have open.
|
|||||||
|
|
||||||
As you read this, you may find you need to learn about Zulip's
|
As you read this, you may find you need to learn about Zulip's
|
||||||
real-time push system; the
|
real-time push system; the
|
||||||
[real-time push and events](../subsystems/events-system.html) documentation has a
|
[real-time push and events](../subsystems/events-system.html)
|
||||||
detailed explanation of how everything works.
|
documentation has a detailed explanation of how everything works. You
|
||||||
|
may also find it beneficial to read Zulip's
|
||||||
|
[architectural overview](../overview/architecture-overview.html).
|
||||||
|
Zulip is a web application built using the
|
||||||
|
[Django framework](https://www.djangoproject.com/), and some of the
|
||||||
|
processes listed in this tutorial, such as database migrations and
|
||||||
|
tests, use Django's tooling.
|
||||||
|
|
||||||
|
Zulip's [directory structure](../overview/directory-structure.html) will also be
|
||||||
|
helpful to review when creating a new feature. Many aspects of the structure
|
||||||
|
will be familiar to Django developers. Visit
|
||||||
|
[Django's documentation](https://docs.djangoproject.com/en/1.11/#index-first-steps)
|
||||||
|
for more information about how Django projects are typically organized.
|
||||||
|
|
||||||
## General Process
|
## General Process
|
||||||
|
|
||||||
@@ -50,13 +62,18 @@ organization in Zulip). The following files are involved in the process:
|
|||||||
**Update the model:** The server accesses the underlying database in
|
**Update the model:** The server accesses the underlying database in
|
||||||
`zerver/models.py`. Add a new field in the appropriate class.
|
`zerver/models.py`. Add a new field in the appropriate class.
|
||||||
|
|
||||||
**Create and run the migration:** To create and apply a migration, run:
|
**Create and run the migration:** To create and apply a migration, run the
|
||||||
|
following commands:
|
||||||
|
|
||||||
```
|
```
|
||||||
./manage.py makemigrations
|
./manage.py makemigrations
|
||||||
./manage.py migrate
|
./manage.py migrate
|
||||||
```
|
```
|
||||||
|
|
||||||
|
You can read our
|
||||||
|
[database migration documentation](../subsystems/schema-migrations.html)
|
||||||
|
to learn more about creating and applying database migrations.
|
||||||
|
|
||||||
**Test your changes:** Once you've run the migration, flush memcached
|
**Test your changes:** Once you've run the migration, flush memcached
|
||||||
on your development server (`./scripts/setup/flush-memcached`) and then
|
on your development server (`./scripts/setup/flush-memcached`) and then
|
||||||
[restart the development server](
|
[restart the development server](
|
||||||
@@ -197,8 +214,8 @@ below will point out where to write additional code for these cases.
|
|||||||
|
|
||||||
### Create the migration
|
### Create the migration
|
||||||
|
|
||||||
Create the migration file: `./manage.py makemigrations`. Make sure to
|
Create the migration file using the Django `makemigrations` command:
|
||||||
commit the generated file to git:
|
`./manage.py makemigrations`. Make sure to commit the generated file to git:
|
||||||
`git add zerver/migrations/NNNN_realm_mandatory_topics.py`
|
`git add zerver/migrations/NNNN_realm_mandatory_topics.py`
|
||||||
(NNNN is a number that is equal to the number of migrations.)
|
(NNNN is a number that is equal to the number of migrations.)
|
||||||
|
|
||||||
@@ -208,7 +225,7 @@ is helpful.
|
|||||||
|
|
||||||
### Test your migration changes
|
### Test your migration changes
|
||||||
|
|
||||||
Apply the migration: `./manage.py migrate`
|
Apply the migration using Django's `migrate` command: `./manage.py migrate`.
|
||||||
|
|
||||||
Output:
|
Output:
|
||||||
```
|
```
|
||||||
@@ -435,7 +452,7 @@ with the new value. E.g., for `authentication_methods`, we created
|
|||||||
# ...
|
# ...
|
||||||
|
|
||||||
This completes the backend implementation. A great next step is to
|
This completes the backend implementation. A great next step is to
|
||||||
write the [backend tests](../testing/testing-with-django.html).
|
write automated backend tests for your new feature.
|
||||||
|
|
||||||
### Backend Tests
|
### Backend Tests
|
||||||
|
|
||||||
@@ -451,7 +468,12 @@ framework is `do_set_realm_property_test`, and in `test_realm.py`, it is
|
|||||||
`do_test_realm_update_api`.
|
`do_test_realm_update_api`.
|
||||||
|
|
||||||
One still needs to add a test for whether the setting actually
|
One still needs to add a test for whether the setting actually
|
||||||
controls the feature it is supposed to control, however.
|
controls the feature it is supposed to control, however (e.g. for this
|
||||||
|
example feature, whether sending a message without a topic fails with
|
||||||
|
the setting enabled).
|
||||||
|
|
||||||
|
Visit Zulip's [Django testing](../testing/testing-with-django.html)
|
||||||
|
documentation to learn more about the backend testing framework.
|
||||||
|
|
||||||
### Update the front end
|
### Update the front end
|
||||||
|
|
||||||
@@ -606,10 +628,11 @@ server repository, where the source for Zulip's user documentation is
|
|||||||
stored. For information on writing user documentation, see
|
stored. For information on writing user documentation, see
|
||||||
[Zulip's general user guide documentation](../subsystems/user-docs.html).
|
[Zulip's general user guide documentation](../subsystems/user-docs.html).
|
||||||
|
|
||||||
For a more concrete example of writing documentation for a new feature, see
|
For a more concrete example of writing documentation for a new
|
||||||
[an example commit in the Zulip repo](
|
feature, see [an example commit in the Zulip repo][example-commit]
|
||||||
https://github.com/zulip/zulip/commit/5b4d9774e02a45e43465b0a28ffb3d9b373c9098)
|
that documented a new realm feature, [the current source][example-current-source],
|
||||||
that documented a new realm feature, [the current source](
|
and [the final rendered documentation][example-docs].
|
||||||
https://github.com/zulip/zulip/blob/master/templates/zerver/help/only-allow-admins-to-invite-new-users.md),
|
|
||||||
and [the final rendered documentation](
|
[example-commit]: https://github.com/zulip/zulip/commit/5b4d9774e02a45e43465b0a28ffb3d9b373c9098
|
||||||
https://chat.zulip.org/help/only-allow-admins-to-invite-new-users).
|
[example-current-source]: https://github.com/zulip/zulip/blob/master/templates/zerver/help/only-allow-admins-to-invite-new-users.md
|
||||||
|
[example-docs]: https://chat.zulip.org/help/only-allow-admins-to-invite-new-users
|
||||||
|
|||||||
Reference in New Issue
Block a user