mirror of
https://github.com/evennia/evennia.git
synced 2026-03-24 16:56:32 +01:00
Updated HTML docs
This commit is contained in:
parent
66d0ad0bc9
commit
7900aad365
2073 changed files with 32986 additions and 41197 deletions
|
|
@ -14,6 +14,8 @@
|
|||
<script src="../_static/underscore.js"></script>
|
||||
<script src="../_static/doctools.js"></script>
|
||||
<script src="../_static/language_data.js"></script>
|
||||
<script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
||||
<script type="text/x-mathjax-config">MathJax.Hub.Config({"tex2jax": {"processClass": "tex2jax_process|mathjax_process|math|output_area"}})</script>
|
||||
<link rel="shortcut icon" href="../_static/favicon.ico"/>
|
||||
<link rel="index" title="Index" href="../genindex.html" />
|
||||
<link rel="search" title="Search" href="../search.html" />
|
||||
|
|
@ -38,7 +40,7 @@
|
|||
<div class="bodywrapper">
|
||||
<div class="body" role="main">
|
||||
|
||||
<section id="web-character-generation">
|
||||
<section class="tex2jax_ignore mathjax_ignore" id="web-character-generation">
|
||||
<h1>Web Character Generation<a class="headerlink" href="#web-character-generation" title="Permalink to this headline">¶</a></h1>
|
||||
<section id="introduction">
|
||||
<h2>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline">¶</a></h2>
|
||||
|
|
@ -85,7 +87,7 @@ you see it listed:</p>
|
|||
<section id="installing-an-app">
|
||||
<h2>Installing an App<a class="headerlink" href="#installing-an-app" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Assuming your game is named “mygame”, navigate to your <code class="docutils literal notranslate"><span class="pre">mygame/</span></code> directory, and type:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">evennia</span> <span class="n">startapp</span> <span class="n">chargen</span>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>evennia startapp chargen
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>This will initialize a new Django app we choose to call “chargen”. It is directory containing some
|
||||
|
|
@ -94,7 +96,7 @@ in your <code class="docutils literal notranslate"><span class="pre">mygame</spa
|
|||
<code class="docutils literal notranslate"><span class="pre">mygame/web/chargen</span></code> in the end.</p>
|
||||
<p>Next, navigate to <code class="docutils literal notranslate"><span class="pre">mygame/server/conf/settings.py</span></code> and add or edit the following line to make
|
||||
Evennia (and Django) aware of our new app:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">INSTALLED_APPS</span> <span class="o">+=</span> <span class="p">(</span><span class="s1">'web.chargen'</span><span class="p">,)</span>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>INSTALLED_APPS += ('web.chargen',)
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>After this, we will get into defining our <em>models</em> (the description of the database storage),
|
||||
|
|
@ -104,14 +106,14 @@ and <em>templates</em> (how the web page should be structured).</p>
|
|||
<h3>Installing - Checkpoint:<a class="headerlink" href="#installing-checkpoint" title="Permalink to this headline">¶</a></h3>
|
||||
<ul class="simple">
|
||||
<li><p>you should have a folder named <code class="docutils literal notranslate"><span class="pre">chargen</span></code> or whatever you chose in your mygame/web/ directory</p></li>
|
||||
<li><p>you should have your application name added to your INSTALLED_APPS in settings.py</p></li>
|
||||
<li><p>you should have your application name added to your INSTALLED_APPS in <a class="reference external" href="http://settings.py">settings.py</a></p></li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
<section id="create-models">
|
||||
<h2>Create Models<a class="headerlink" href="#create-models" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Models are created in <code class="docutils literal notranslate"><span class="pre">mygame/web/chargen/models.py</span></code>.</p>
|
||||
<p>A <a class="reference internal" href="../Concepts/New-Models.html"><span class="doc">Django database model</span></a> is a Python class that describes the database storage of the
|
||||
<p>A <a class="reference internal" href="../Concepts/New-Models.html"><span class="doc std std-doc">Django database model</span></a> is a Python class that describes the database storage of the
|
||||
data you want to manage. Any data you choose to store is stored in the same database as the game and
|
||||
you have access to all the game’s objects here.</p>
|
||||
<p>We need to define what a character application actually is. This will differ from game to game so
|
||||
|
|
@ -130,17 +132,7 @@ AccountID from the AccountDB object.</p></li>
|
|||
attributes and so on.</p>
|
||||
</div></blockquote>
|
||||
<p>Our <code class="docutils literal notranslate"><span class="pre">models.py</span></code> file should look something like this:</p>
|
||||
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
||||
<span class="normal"> 2</span>
|
||||
<span class="normal"> 3</span>
|
||||
<span class="normal"> 4</span>
|
||||
<span class="normal"> 5</span>
|
||||
<span class="normal"> 6</span>
|
||||
<span class="normal"> 7</span>
|
||||
<span class="normal"> 8</span>
|
||||
<span class="normal"> 9</span>
|
||||
<span class="normal">10</span>
|
||||
<span class="normal">11</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># in mygame/web/chargen/models.py</span>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># in mygame/web/chargen/models.py</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">django.db</span> <span class="kn">import</span> <span class="n">models</span>
|
||||
|
||||
|
|
@ -152,7 +144,7 @@ attributes and so on.</p>
|
|||
<span class="n">account_id</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">IntegerField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">verbose_name</span><span class="o">=</span><span class="s1">'Account ID'</span><span class="p">)</span>
|
||||
<span class="n">submitted</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</div>
|
||||
<p>You should consider how you are going to link your application to your account. For this tutorial,
|
||||
we are using the account_id attribute on our character application model in order to keep track of
|
||||
which characters are owned by which accounts. Since the account id is a primary key in Evennia, it
|
||||
|
|
@ -183,18 +175,7 @@ given Character.</p></li>
|
|||
<h3><em>Index</em> view<a class="headerlink" href="#index-view" title="Permalink to this headline">¶</a></h3>
|
||||
<p>Let’s get started with the index first.</p>
|
||||
<p>We’ll want characters to be able to see their created characters so let’s</p>
|
||||
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
||||
<span class="normal"> 2</span>
|
||||
<span class="normal"> 3</span>
|
||||
<span class="normal"> 4</span>
|
||||
<span class="normal"> 5</span>
|
||||
<span class="normal"> 6</span>
|
||||
<span class="normal"> 7</span>
|
||||
<span class="normal"> 8</span>
|
||||
<span class="normal"> 9</span>
|
||||
<span class="normal">10</span>
|
||||
<span class="normal">11</span>
|
||||
<span class="normal">12</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># file mygame/web/chargen.views.py</span>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># file mygame/web/chargen.views.py</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">.models</span> <span class="kn">import</span> <span class="n">CharApp</span>
|
||||
|
||||
|
|
@ -207,7 +188,7 @@ given Character.</p></li>
|
|||
<span class="c1"># make the variables in 'context' available to the web page template</span>
|
||||
<span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">'chargen/index.html'</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</div>
|
||||
</section>
|
||||
<section id="detail-view">
|
||||
<h3><em>Detail</em> view<a class="headerlink" href="#detail-view" title="Permalink to this headline">¶</a></h3>
|
||||
|
|
@ -219,17 +200,7 @@ is a basic demonstration, our detail page will only show two fields:</p>
|
|||
</ul>
|
||||
<p>We will use the account ID again just to double-check that whoever tries to check our character page
|
||||
is actually the account who owns the application.</p>
|
||||
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
||||
<span class="normal"> 2</span>
|
||||
<span class="normal"> 3</span>
|
||||
<span class="normal"> 4</span>
|
||||
<span class="normal"> 5</span>
|
||||
<span class="normal"> 6</span>
|
||||
<span class="normal"> 7</span>
|
||||
<span class="normal"> 8</span>
|
||||
<span class="normal"> 9</span>
|
||||
<span class="normal">10</span>
|
||||
<span class="normal">11</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># file mygame/web/chargen.views.py</span>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># file mygame/web/chargen.views.py</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">detail</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">app_id</span><span class="p">):</span>
|
||||
<span class="n">app</span> <span class="o">=</span> <span class="n">CharApp</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">app_id</span><span class="o">=</span><span class="n">app_id</span><span class="p">)</span>
|
||||
|
|
@ -237,11 +208,11 @@ is actually the account who owns the application.</p>
|
|||
<span class="n">background</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">background</span>
|
||||
<span class="n">submitted</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">submitted</span>
|
||||
<span class="n">p_id</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">id</span>
|
||||
<span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'name'</span><span class="p">:</span> <span class="n">name</span><span class="p">,</span> <span class="s1">'background'</span><span class="p">:</span> <span class="n">background</span><span class="p">,</span>
|
||||
<span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'name'</span><span class="p">:</span> <span class="n">name</span><span class="p">,</span> <span class="s1">'background'</span><span class="p">:</span> <span class="n">background</span><span class="p">,</span>
|
||||
<span class="s1">'p_id'</span><span class="p">:</span> <span class="n">p_id</span><span class="p">,</span> <span class="s1">'submitted'</span><span class="p">:</span> <span class="n">submitted</span><span class="p">}</span>
|
||||
<span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">'chargen/detail.html'</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
<section id="creating-view">
|
||||
|
|
@ -251,13 +222,7 @@ information from the user, validate the information, and send the information to
|
|||
the form content is validated will actually create a playable Character.</p>
|
||||
<p>The form itself we will define first. In our simple example we are just looking for the Character’s
|
||||
name and background. This form we create in <code class="docutils literal notranslate"><span class="pre">mygame/web/chargen/forms.py</span></code>:</p>
|
||||
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
||||
<span class="normal">2</span>
|
||||
<span class="normal">3</span>
|
||||
<span class="normal">4</span>
|
||||
<span class="normal">5</span>
|
||||
<span class="normal">6</span>
|
||||
<span class="normal">7</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># file mygame/web/chargen/forms.py</span>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># file mygame/web/chargen/forms.py</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">django</span> <span class="kn">import</span> <span class="n">forms</span>
|
||||
|
||||
|
|
@ -265,56 +230,9 @@ name and background. This form we create in <code class="docutils literal notran
|
|||
<span class="n">name</span> <span class="o">=</span> <span class="n">forms</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">label</span><span class="o">=</span><span class="s1">'Character Name'</span><span class="p">,</span> <span class="n">max_length</span><span class="o">=</span><span class="mi">80</span><span class="p">)</span>
|
||||
<span class="n">background</span> <span class="o">=</span> <span class="n">forms</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">label</span><span class="o">=</span><span class="s1">'Background'</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</div>
|
||||
<p>Now we make use of this form in our view.</p>
|
||||
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
||||
<span class="normal"> 2</span>
|
||||
<span class="normal"> 3</span>
|
||||
<span class="normal"> 4</span>
|
||||
<span class="normal"> 5</span>
|
||||
<span class="normal"> 6</span>
|
||||
<span class="normal"> 7</span>
|
||||
<span class="normal"> 8</span>
|
||||
<span class="normal"> 9</span>
|
||||
<span class="normal">10</span>
|
||||
<span class="normal">11</span>
|
||||
<span class="normal">12</span>
|
||||
<span class="normal">13</span>
|
||||
<span class="normal">14</span>
|
||||
<span class="normal">15</span>
|
||||
<span class="normal">16</span>
|
||||
<span class="normal">17</span>
|
||||
<span class="normal">18</span>
|
||||
<span class="normal">19</span>
|
||||
<span class="normal">20</span>
|
||||
<span class="normal">21</span>
|
||||
<span class="normal">22</span>
|
||||
<span class="normal">23</span>
|
||||
<span class="normal">24</span>
|
||||
<span class="normal">25</span>
|
||||
<span class="normal">26</span>
|
||||
<span class="normal">27</span>
|
||||
<span class="normal">28</span>
|
||||
<span class="normal">29</span>
|
||||
<span class="normal">30</span>
|
||||
<span class="normal">31</span>
|
||||
<span class="normal">32</span>
|
||||
<span class="normal">33</span>
|
||||
<span class="normal">34</span>
|
||||
<span class="normal">35</span>
|
||||
<span class="normal">36</span>
|
||||
<span class="normal">37</span>
|
||||
<span class="normal">38</span>
|
||||
<span class="normal">39</span>
|
||||
<span class="normal">40</span>
|
||||
<span class="normal">41</span>
|
||||
<span class="normal">42</span>
|
||||
<span class="normal">43</span>
|
||||
<span class="normal">44</span>
|
||||
<span class="normal">45</span>
|
||||
<span class="normal">46</span>
|
||||
<span class="normal">47</span>
|
||||
<span class="normal">48</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># file mygame/web/chargen/views.py</span>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># file mygame/web/chargen/views.py</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">web.chargen.models</span> <span class="kn">import</span> <span class="n">CharApp</span>
|
||||
<span class="kn">from</span> <span class="nn">web.chargen.forms</span> <span class="kn">import</span> <span class="n">AppForm</span>
|
||||
|
|
@ -335,8 +253,8 @@ name and background. This form we create in <code class="docutils literal notran
|
|||
<span class="n">submitted</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="k">if</span> <span class="s1">'save'</span> <span class="ow">in</span> <span class="n">request</span><span class="o">.</span><span class="n">POST</span><span class="p">:</span>
|
||||
<span class="n">submitted</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="n">app</span> <span class="o">=</span> <span class="n">CharApp</span><span class="p">(</span><span class="n">char_name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span> <span class="n">background</span><span class="o">=</span><span class="n">background</span><span class="p">,</span>
|
||||
<span class="n">date_applied</span><span class="o">=</span><span class="n">applied_date</span><span class="p">,</span> <span class="n">account_id</span><span class="o">=</span><span class="n">user</span><span class="o">.</span><span class="n">id</span><span class="p">,</span>
|
||||
<span class="n">app</span> <span class="o">=</span> <span class="n">CharApp</span><span class="p">(</span><span class="n">char_name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span> <span class="n">background</span><span class="o">=</span><span class="n">background</span><span class="p">,</span>
|
||||
<span class="n">date_applied</span><span class="o">=</span><span class="n">applied_date</span><span class="p">,</span> <span class="n">account_id</span><span class="o">=</span><span class="n">user</span><span class="o">.</span><span class="n">id</span><span class="p">,</span>
|
||||
<span class="n">submitted</span><span class="o">=</span><span class="n">submitted</span><span class="p">)</span>
|
||||
<span class="n">app</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">submitted</span><span class="p">:</span>
|
||||
|
|
@ -344,9 +262,9 @@ name and background. This form we create in <code class="docutils literal notran
|
|||
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_CHARACTER_TYPECLASS</span>
|
||||
<span class="n">home</span> <span class="o">=</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_id</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">GUEST_HOME</span><span class="p">)</span>
|
||||
<span class="c1"># turn the permissionhandler to a string</span>
|
||||
<span class="n">perms</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">user</span><span class="o">.</span><span class="n">permissions</span><span class="p">)</span>
|
||||
<span class="n">perms</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">user</span><span class="o">.</span><span class="n">permissions</span><span class="p">)</span>
|
||||
<span class="c1"># create the character</span>
|
||||
<span class="n">char</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_object</span><span class="p">(</span><span class="n">typeclass</span><span class="o">=</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
|
||||
<span class="n">char</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_object</span><span class="p">(</span><span class="n">typeclass</span><span class="o">=</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
|
||||
<span class="n">home</span><span class="o">=</span><span class="n">home</span><span class="p">,</span> <span class="n">permissions</span><span class="o">=</span><span class="n">perms</span><span class="p">)</span>
|
||||
<span class="n">user</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_playable_characters</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">char</span><span class="p">)</span>
|
||||
<span class="c1"># add the right locks for the character so the account can</span>
|
||||
|
|
@ -363,7 +281,7 @@ name and background. This form we create in <code class="docutils literal notran
|
|||
<span class="n">form</span> <span class="o">=</span> <span class="n">AppForm</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">'chargen/create.html'</span><span class="p">,</span> <span class="p">{</span><span class="s1">'form'</span><span class="p">:</span> <span class="n">form</span><span class="p">})</span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</div>
|
||||
<blockquote>
|
||||
<div><p>Note also that we basically create the character using the Evennia API, and we grab the proper
|
||||
permissions from the <code class="docutils literal notranslate"><span class="pre">AccountDB</span></code> object and copy them to the character object. We take the user
|
||||
|
|
@ -372,9 +290,9 @@ create_object function to properly process the permissions.</p>
|
|||
</div></blockquote>
|
||||
<p>Most importantly, the following attributes must be set on the created character object:</p>
|
||||
<ul class="simple">
|
||||
<li><p>Evennia <a class="reference external" href="Components/Locks.html#permissions">permissions</a> (copied from the <code class="docutils literal notranslate"><span class="pre">AccountDB</span></code>).</p></li>
|
||||
<li><p>The right <code class="docutils literal notranslate"><span class="pre">puppet</span></code> <a class="reference internal" href="../Components/Locks.html"><span class="doc">locks</span></a> so the Account can actually play as this Character later.</p></li>
|
||||
<li><p>The relevant Character <a class="reference internal" href="../Components/Typeclasses.html"><span class="doc">typeclass</span></a></p></li>
|
||||
<li><p>Evennia <a class="reference internal" href="../Components/Permissions.html"><span class="doc std std-doc">permissions</span></a> (copied from the <code class="docutils literal notranslate"><span class="pre">AccountDB</span></code>).</p></li>
|
||||
<li><p>The right <code class="docutils literal notranslate"><span class="pre">puppet</span></code> <a class="reference internal" href="../Components/Locks.html"><span class="doc std std-doc">locks</span></a> so the Account can actually play as this Character later.</p></li>
|
||||
<li><p>The relevant Character <a class="reference internal" href="../Components/Typeclasses.html"><span class="doc std std-doc">typeclass</span></a></p></li>
|
||||
<li><p>Character name (key)</p></li>
|
||||
<li><p>The Character’s home room location (<code class="docutils literal notranslate"><span class="pre">#2</span></code> by default)</p></li>
|
||||
</ul>
|
||||
|
|
@ -383,74 +301,8 @@ character. It may be a good idea to decompose this function and create a separat
|
|||
function in order to set up your character object the account owns. But with the Evennia API,
|
||||
setting custom attributes is as easy as doing it in the meat of your Evennia game directory.</p>
|
||||
<p>After all of this, our <code class="docutils literal notranslate"><span class="pre">views.py</span></code> file should look like something like this:</p>
|
||||
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
||||
<span class="normal"> 2</span>
|
||||
<span class="normal"> 3</span>
|
||||
<span class="normal"> 4</span>
|
||||
<span class="normal"> 5</span>
|
||||
<span class="normal"> 6</span>
|
||||
<span class="normal"> 7</span>
|
||||
<span class="normal"> 8</span>
|
||||
<span class="normal"> 9</span>
|
||||
<span class="normal">10</span>
|
||||
<span class="normal">11</span>
|
||||
<span class="normal">12</span>
|
||||
<span class="normal">13</span>
|
||||
<span class="normal">14</span>
|
||||
<span class="normal">15</span>
|
||||
<span class="normal">16</span>
|
||||
<span class="normal">17</span>
|
||||
<span class="normal">18</span>
|
||||
<span class="normal">19</span>
|
||||
<span class="normal">20</span>
|
||||
<span class="normal">21</span>
|
||||
<span class="normal">22</span>
|
||||
<span class="normal">23</span>
|
||||
<span class="normal">24</span>
|
||||
<span class="normal">25</span>
|
||||
<span class="normal">26</span>
|
||||
<span class="normal">27</span>
|
||||
<span class="normal">28</span>
|
||||
<span class="normal">29</span>
|
||||
<span class="normal">30</span>
|
||||
<span class="normal">31</span>
|
||||
<span class="normal">32</span>
|
||||
<span class="normal">33</span>
|
||||
<span class="normal">34</span>
|
||||
<span class="normal">35</span>
|
||||
<span class="normal">36</span>
|
||||
<span class="normal">37</span>
|
||||
<span class="normal">38</span>
|
||||
<span class="normal">39</span>
|
||||
<span class="normal">40</span>
|
||||
<span class="normal">41</span>
|
||||
<span class="normal">42</span>
|
||||
<span class="normal">43</span>
|
||||
<span class="normal">44</span>
|
||||
<span class="normal">45</span>
|
||||
<span class="normal">46</span>
|
||||
<span class="normal">47</span>
|
||||
<span class="normal">48</span>
|
||||
<span class="normal">49</span>
|
||||
<span class="normal">50</span>
|
||||
<span class="normal">51</span>
|
||||
<span class="normal">52</span>
|
||||
<span class="normal">53</span>
|
||||
<span class="normal">54</span>
|
||||
<span class="normal">55</span>
|
||||
<span class="normal">56</span>
|
||||
<span class="normal">57</span>
|
||||
<span class="normal">58</span>
|
||||
<span class="normal">59</span>
|
||||
<span class="normal">60</span>
|
||||
<span class="normal">61</span>
|
||||
<span class="normal">62</span>
|
||||
<span class="normal">63</span>
|
||||
<span class="normal">64</span>
|
||||
<span class="normal">65</span>
|
||||
<span class="normal">66</span>
|
||||
<span class="normal">67</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># file mygame/web/chargen/views.py</span>
|
||||
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># file mygame/web/chargen/views.py</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">django.shortcuts</span> <span class="kn">import</span> <span class="n">render</span>
|
||||
<span class="kn">from</span> <span class="nn">web.chargen.models</span> <span class="kn">import</span> <span class="n">CharApp</span>
|
||||
<span class="kn">from</span> <span class="nn">web.chargen.forms</span> <span class="kn">import</span> <span class="n">AppForm</span>
|
||||
|
|
@ -474,7 +326,7 @@ setting custom attributes is as easy as doing it in the meat of your Evennia gam
|
|||
<span class="n">background</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">background</span>
|
||||
<span class="n">submitted</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">submitted</span>
|
||||
<span class="n">p_id</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">id</span>
|
||||
<span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'name'</span><span class="p">:</span> <span class="n">name</span><span class="p">,</span> <span class="s1">'background'</span><span class="p">:</span> <span class="n">background</span><span class="p">,</span>
|
||||
<span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'name'</span><span class="p">:</span> <span class="n">name</span><span class="p">,</span> <span class="s1">'background'</span><span class="p">:</span> <span class="n">background</span><span class="p">,</span>
|
||||
<span class="s1">'p_id'</span><span class="p">:</span> <span class="n">p_id</span><span class="p">,</span> <span class="s1">'submitted'</span><span class="p">:</span> <span class="n">submitted</span><span class="p">}</span>
|
||||
<span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">'chargen/detail.html'</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
|
||||
|
||||
|
|
@ -489,8 +341,8 @@ setting custom attributes is as easy as doing it in the meat of your Evennia gam
|
|||
<span class="n">submitted</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="k">if</span> <span class="s1">'save'</span> <span class="ow">in</span> <span class="n">request</span><span class="o">.</span><span class="n">POST</span><span class="p">:</span>
|
||||
<span class="n">submitted</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="n">app</span> <span class="o">=</span> <span class="n">CharApp</span><span class="p">(</span><span class="n">char_name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span> <span class="n">background</span><span class="o">=</span><span class="n">background</span><span class="p">,</span>
|
||||
<span class="n">date_applied</span><span class="o">=</span><span class="n">applied_date</span><span class="p">,</span> <span class="n">account_id</span><span class="o">=</span><span class="n">user</span><span class="o">.</span><span class="n">id</span><span class="p">,</span>
|
||||
<span class="n">app</span> <span class="o">=</span> <span class="n">CharApp</span><span class="p">(</span><span class="n">char_name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span> <span class="n">background</span><span class="o">=</span><span class="n">background</span><span class="p">,</span>
|
||||
<span class="n">date_applied</span><span class="o">=</span><span class="n">applied_date</span><span class="p">,</span> <span class="n">account_id</span><span class="o">=</span><span class="n">user</span><span class="o">.</span><span class="n">id</span><span class="p">,</span>
|
||||
<span class="n">submitted</span><span class="o">=</span><span class="n">submitted</span><span class="p">)</span>
|
||||
<span class="n">app</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">submitted</span><span class="p">:</span>
|
||||
|
|
@ -498,9 +350,9 @@ setting custom attributes is as easy as doing it in the meat of your Evennia gam
|
|||
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_CHARACTER_TYPECLASS</span>
|
||||
<span class="n">home</span> <span class="o">=</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_id</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">GUEST_HOME</span><span class="p">)</span>
|
||||
<span class="c1"># turn the permissionhandler to a string</span>
|
||||
<span class="n">perms</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">user</span><span class="o">.</span><span class="n">permissions</span><span class="p">)</span>
|
||||
<span class="n">perms</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">user</span><span class="o">.</span><span class="n">permissions</span><span class="p">)</span>
|
||||
<span class="c1"># create the character</span>
|
||||
<span class="n">char</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_object</span><span class="p">(</span><span class="n">typeclass</span><span class="o">=</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
|
||||
<span class="n">char</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_object</span><span class="p">(</span><span class="n">typeclass</span><span class="o">=</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
|
||||
<span class="n">home</span><span class="o">=</span><span class="n">home</span><span class="p">,</span> <span class="n">permissions</span><span class="o">=</span><span class="n">perms</span><span class="p">)</span>
|
||||
<span class="n">user</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_playable_characters</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">char</span><span class="p">)</span>
|
||||
<span class="c1"># add the right locks for the character so the account can</span>
|
||||
|
|
@ -517,12 +369,12 @@ setting custom attributes is as easy as doing it in the meat of your Evennia gam
|
|||
<span class="n">form</span> <span class="o">=</span> <span class="n">AppForm</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">'chargen/create.html'</span><span class="p">,</span> <span class="p">{</span><span class="s1">'form'</span><span class="p">:</span> <span class="n">form</span><span class="p">})</span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</div>
|
||||
<section id="create-views-checkpoint">
|
||||
<h3>Create Views - Checkpoint:<a class="headerlink" href="#create-views-checkpoint" title="Permalink to this headline">¶</a></h3>
|
||||
<ul class="simple">
|
||||
<li><p>you’ve defined a <code class="docutils literal notranslate"><span class="pre">views.py</span></code> that has an index, detail, and creating functions.</p></li>
|
||||
<li><p>you’ve defined a forms.py with the <code class="docutils literal notranslate"><span class="pre">AppForm</span></code> class needed by the <code class="docutils literal notranslate"><span class="pre">creating</span></code> function of
|
||||
<li><p>you’ve defined a <a class="reference external" href="http://forms.py">forms.py</a> with the <code class="docutils literal notranslate"><span class="pre">AppForm</span></code> class needed by the <code class="docutils literal notranslate"><span class="pre">creating</span></code> function of
|
||||
<code class="docutils literal notranslate"><span class="pre">views.py</span></code>.</p></li>
|
||||
<li><p>your <code class="docutils literal notranslate"><span class="pre">mygame/web/chargen</span></code> directory should now have a <code class="docutils literal notranslate"><span class="pre">views.py</span></code> and <code class="docutils literal notranslate"><span class="pre">forms.py</span></code> file</p></li>
|
||||
</ul>
|
||||
|
|
@ -532,19 +384,7 @@ setting custom attributes is as easy as doing it in the meat of your Evennia gam
|
|||
<h2>Create URLs<a class="headerlink" href="#create-urls" title="Permalink to this headline">¶</a></h2>
|
||||
<p>URL patterns helps redirect requests from the web browser to the right views. These patterns are
|
||||
created in <code class="docutils literal notranslate"><span class="pre">mygame/web/chargen/urls.py</span></code>.</p>
|
||||
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
||||
<span class="normal"> 2</span>
|
||||
<span class="normal"> 3</span>
|
||||
<span class="normal"> 4</span>
|
||||
<span class="normal"> 5</span>
|
||||
<span class="normal"> 6</span>
|
||||
<span class="normal"> 7</span>
|
||||
<span class="normal"> 8</span>
|
||||
<span class="normal"> 9</span>
|
||||
<span class="normal">10</span>
|
||||
<span class="normal">11</span>
|
||||
<span class="normal">12</span>
|
||||
<span class="normal">13</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># file mygame/web/chargen/urls.py</span>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># file mygame/web/chargen/urls.py</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">django.conf.urls</span> <span class="kn">import</span> <span class="n">url</span>
|
||||
<span class="kn">from</span> <span class="nn">web.chargen</span> <span class="kn">import</span> <span class="n">views</span>
|
||||
|
|
@ -558,31 +398,14 @@ created in <code class="docutils literal notranslate"><span class="pre">mygame/w
|
|||
<span class="n">url</span><span class="p">(</span><span class="sa">r</span><span class="s1">'^create/$'</span><span class="p">,</span> <span class="n">views</span><span class="o">.</span><span class="n">creating</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s1">'creating'</span><span class="p">),</span>
|
||||
<span class="p">]</span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</div>
|
||||
<p>You could change the format as you desire. To make it more secure, you could remove app_id from the
|
||||
“detail” url, and instead just fetch the account’s applications using a unifying field like
|
||||
account_id to find all the character application objects to display.</p>
|
||||
<p>We must also update the main <code class="docutils literal notranslate"><span class="pre">mygame/web/urls.py</span></code> file (that is, one level up from our chargen app),
|
||||
so the main website knows where our app’s views are located. Find the <code class="docutils literal notranslate"><span class="pre">patterns</span></code> variable, and
|
||||
change it to include:</p>
|
||||
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
||||
<span class="normal"> 2</span>
|
||||
<span class="normal"> 3</span>
|
||||
<span class="normal"> 4</span>
|
||||
<span class="normal"> 5</span>
|
||||
<span class="normal"> 6</span>
|
||||
<span class="normal"> 7</span>
|
||||
<span class="normal"> 8</span>
|
||||
<span class="normal"> 9</span>
|
||||
<span class="normal">10</span>
|
||||
<span class="normal">11</span>
|
||||
<span class="normal">12</span>
|
||||
<span class="normal">13</span>
|
||||
<span class="normal">14</span>
|
||||
<span class="normal">15</span>
|
||||
<span class="normal">16</span>
|
||||
<span class="normal">17</span>
|
||||
<span class="normal">18</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># in file mygame/web/urls.py</span>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># in file mygame/web/urls.py</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">django.conf.urls</span> <span class="kn">import</span> <span class="n">url</span><span class="p">,</span> <span class="n">include</span>
|
||||
|
||||
|
|
@ -601,11 +424,11 @@ change it to include:</p>
|
|||
|
||||
<span class="n">urlpatterns</span> <span class="o">=</span> <span class="n">custom_patterns</span> <span class="o">+</span> <span class="n">urlpatterns</span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</div>
|
||||
<section id="urls-checkpoint">
|
||||
<h3>URLs - Checkpoint:<a class="headerlink" href="#urls-checkpoint" title="Permalink to this headline">¶</a></h3>
|
||||
<ul class="simple">
|
||||
<li><p>You’ve created a urls.py file in the <code class="docutils literal notranslate"><span class="pre">mygame/web/chargen</span></code> directory</p></li>
|
||||
<li><p>You’ve created a <a class="reference external" href="http://urls.py">urls.py</a> file in the <code class="docutils literal notranslate"><span class="pre">mygame/web/chargen</span></code> directory</p></li>
|
||||
<li><p>You have edited the main <code class="docutils literal notranslate"><span class="pre">mygame/web/urls.py</span></code> file to include urls to the <code class="docutils literal notranslate"><span class="pre">chargen</span></code> directory.</p></li>
|
||||
</ul>
|
||||
</section>
|
||||
|
|
@ -625,25 +448,7 @@ this demonstration, we will only list the applications that the account has subm
|
|||
easily adjust this to include saved applications, or other types of applications if you have
|
||||
different kinds.</p>
|
||||
<p>Please refer back to <code class="docutils literal notranslate"><span class="pre">views.py</span></code> to see where we define the variables these templates make use of.</p>
|
||||
<div class="highlight-html notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
||||
<span class="normal"> 2</span>
|
||||
<span class="normal"> 3</span>
|
||||
<span class="normal"> 4</span>
|
||||
<span class="normal"> 5</span>
|
||||
<span class="normal"> 6</span>
|
||||
<span class="normal"> 7</span>
|
||||
<span class="normal"> 8</span>
|
||||
<span class="normal"> 9</span>
|
||||
<span class="normal">10</span>
|
||||
<span class="normal">11</span>
|
||||
<span class="normal">12</span>
|
||||
<span class="normal">13</span>
|
||||
<span class="normal">14</span>
|
||||
<span class="normal">15</span>
|
||||
<span class="normal">16</span>
|
||||
<span class="normal">17</span>
|
||||
<span class="normal">18</span>
|
||||
<span class="normal">19</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c"><!-- file mygame/web/chargen/templates/chargen/index.html--></span>
|
||||
<div class="highlight-html notranslate"><div class="highlight"><pre><span></span><span class="c"><!-- file mygame/web/chargen/templates/chargen/index.html--></span>
|
||||
|
||||
{% extends "base.html" %}
|
||||
{% block content %}
|
||||
|
|
@ -663,7 +468,7 @@ different kinds.</p>
|
|||
{% endif %}
|
||||
{% endblock %}
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</div>
|
||||
</section>
|
||||
<section id="detail-html">
|
||||
<h3>detail.html<a class="headerlink" href="#detail-html" title="Permalink to this headline">¶</a></h3>
|
||||
|
|
@ -671,24 +476,7 @@ different kinds.</p>
|
|||
name and character background. You will likely want to extend this to show many more fields for your
|
||||
game. In a full-fledged character generation, you may want to extend the boolean attribute of
|
||||
submitted to allow accounts to save character applications and submit them later.</p>
|
||||
<div class="highlight-html notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
||||
<span class="normal"> 2</span>
|
||||
<span class="normal"> 3</span>
|
||||
<span class="normal"> 4</span>
|
||||
<span class="normal"> 5</span>
|
||||
<span class="normal"> 6</span>
|
||||
<span class="normal"> 7</span>
|
||||
<span class="normal"> 8</span>
|
||||
<span class="normal"> 9</span>
|
||||
<span class="normal">10</span>
|
||||
<span class="normal">11</span>
|
||||
<span class="normal">12</span>
|
||||
<span class="normal">13</span>
|
||||
<span class="normal">14</span>
|
||||
<span class="normal">15</span>
|
||||
<span class="normal">16</span>
|
||||
<span class="normal">17</span>
|
||||
<span class="normal">18</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c"><!-- file mygame/web/chargen/templates/chargen/detail.html--></span>
|
||||
<div class="highlight-html notranslate"><div class="highlight"><pre><span></span><span class="c"><!-- file mygame/web/chargen/templates/chargen/detail.html--></span>
|
||||
|
||||
{% extends "base.html" %}
|
||||
{% block content %}
|
||||
|
|
@ -707,30 +495,16 @@ submitted to allow accounts to save character applications and submit them later
|
|||
{% endif %}
|
||||
{% endblock %}
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</div>
|
||||
</section>
|
||||
<section id="create-html">
|
||||
<h3>create.html<a class="headerlink" href="#create-html" title="Permalink to this headline">¶</a></h3>
|
||||
<p>Our create HTML template will use the Django form we defined back in views.py/forms.py to drive the
|
||||
<p>Our create HTML template will use the Django form we defined back in <a class="reference external" href="http://views.py/forms.py">views.py/forms.py</a> to drive the
|
||||
majority of the application process. There will be a form input for every field we defined in
|
||||
forms.py, which is handy. We have used POST as our method because we are sending information to the
|
||||
<a class="reference external" href="http://forms.py">forms.py</a>, which is handy. We have used POST as our method because we are sending information to the
|
||||
server that will update the database. As an alternative, GET would be much less secure. You can read
|
||||
up on documentation elsewhere on the web for GET vs. POST.</p>
|
||||
<div class="highlight-html notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
||||
<span class="normal"> 2</span>
|
||||
<span class="normal"> 3</span>
|
||||
<span class="normal"> 4</span>
|
||||
<span class="normal"> 5</span>
|
||||
<span class="normal"> 6</span>
|
||||
<span class="normal"> 7</span>
|
||||
<span class="normal"> 8</span>
|
||||
<span class="normal"> 9</span>
|
||||
<span class="normal">10</span>
|
||||
<span class="normal">11</span>
|
||||
<span class="normal">12</span>
|
||||
<span class="normal">13</span>
|
||||
<span class="normal">14</span>
|
||||
<span class="normal">15</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c"><!-- file mygame/web/chargen/templates/chargen/create.html--></span>
|
||||
<div class="highlight-html notranslate"><div class="highlight"><pre><span></span><span class="c"><!-- file mygame/web/chargen/templates/chargen/create.html--></span>
|
||||
|
||||
{% extends "base.html" %}
|
||||
{% block content %}
|
||||
|
|
@ -746,7 +520,7 @@ up on documentation elsewhere on the web for GET vs. POST.</p>
|
|||
{% endif %}
|
||||
{% endblock %}
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</div>
|
||||
</section>
|
||||
<section id="templates-checkpoint">
|
||||
<h3>Templates - Checkpoint:<a class="headerlink" href="#templates-checkpoint" title="Permalink to this headline">¶</a></h3>
|
||||
|
|
@ -759,13 +533,7 @@ up on documentation elsewhere on the web for GET vs. POST.</p>
|
|||
<section id="activating-your-new-character-generation">
|
||||
<h2>Activating your new character generation<a class="headerlink" href="#activating-your-new-character-generation" title="Permalink to this headline">¶</a></h2>
|
||||
<p>After finishing this tutorial you should have edited or created the following files:</p>
|
||||
<div class="highlight-bash notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
||||
<span class="normal">2</span>
|
||||
<span class="normal">3</span>
|
||||
<span class="normal">4</span>
|
||||
<span class="normal">5</span>
|
||||
<span class="normal">6</span>
|
||||
<span class="normal">7</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span>mygame/web/urls.py
|
||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mygame/web/urls.py
|
||||
mygame/web/chargen/models.py
|
||||
mygame/web/chargen/views.py
|
||||
mygame/web/chargen/urls.py
|
||||
|
|
@ -773,13 +541,12 @@ mygame/web/chargen/templates/chargen/index.html
|
|||
mygame/web/chargen/templates/chargen/create.html
|
||||
mygame/web/chargen/templates/chargen/detail.html
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</div>
|
||||
<p>Once you have all these files stand in your <code class="docutils literal notranslate"><span class="pre">mygame/</span></code>folder and run:</p>
|
||||
<div class="highlight-bash notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
||||
<span class="normal">2</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span>evennia makemigrations
|
||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>evennia makemigrations
|
||||
evennia migrate
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</div>
|
||||
<p>This will create and update the models. If you see any errors at this stage, read the traceback
|
||||
carefully, it should be relatively easy to figure out where the error is.</p>
|
||||
<p>Login to the website (you need to have previously registered an Player account with the game to do
|
||||
|
|
@ -814,46 +581,33 @@ find both information on the web page. Both would contain a lot of letters and
|
|||
<h3>Step 2: installing and configuring the dedicated Django app<a class="headerlink" href="#step-2-installing-and-configuring-the-dedicated-django-app" title="Permalink to this headline">¶</a></h3>
|
||||
<p>Since Evennia runs on Django, the easiest way to add our CAPCHA and perform the proper check is to
|
||||
install the dedicated Django app. Quite easy:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pip</span> <span class="n">install</span> <span class="n">django</span><span class="o">-</span><span class="n">nocaptcha</span><span class="o">-</span><span class="n">recaptcha</span>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>pip install django-nocaptcha-recaptcha
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>And add it to the installed apps in your settings. In your <code class="docutils literal notranslate"><span class="pre">mygame/server/conf/settings.py</span></code>, you
|
||||
might have something like this:</p>
|
||||
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
||||
<span class="normal">2</span>
|
||||
<span class="normal">3</span>
|
||||
<span class="normal">4</span>
|
||||
<span class="normal">5</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># ...</span>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># ...</span>
|
||||
<span class="n">INSTALLED_APPS</span> <span class="o">+=</span> <span class="p">(</span>
|
||||
<span class="s1">'web.chargen'</span><span class="p">,</span>
|
||||
<span class="s1">'nocaptcha_recaptcha'</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</div>
|
||||
<p>Don’t close the setting file just yet. We have to add in the site key and secret key. You can add
|
||||
them below:</p>
|
||||
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
||||
<span class="normal">2</span>
|
||||
<span class="normal">3</span>
|
||||
<span class="normal">4</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># NoReCAPCHA site key</span>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># NoReCAPCHA site key</span>
|
||||
<span class="n">NORECAPTCHA_SITE_KEY</span> <span class="o">=</span> <span class="s2">"PASTE YOUR SITE KEY HERE"</span>
|
||||
<span class="c1"># NoReCAPCHA secret key</span>
|
||||
<span class="n">NORECAPTCHA_SECRET_KEY</span> <span class="o">=</span> <span class="s2">"PUT YOUR SECRET KEY HERE"</span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</div>
|
||||
</section>
|
||||
<section id="step-3-adding-the-capcha-to-our-form">
|
||||
<h3>Step 3: Adding the CAPCHA to our form<a class="headerlink" href="#step-3-adding-the-capcha-to-our-form" title="Permalink to this headline">¶</a></h3>
|
||||
<p>Finally we have to add the CAPCHA to our form. It will be pretty easy too. First, open your
|
||||
<code class="docutils literal notranslate"><span class="pre">web/chargen/forms.py</span></code> file. We’re going to add a new field, but hopefully, all the hard work has
|
||||
been done for us. Update at your convenience, You might end up with something like this:</p>
|
||||
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
||||
<span class="normal">2</span>
|
||||
<span class="normal">3</span>
|
||||
<span class="normal">4</span>
|
||||
<span class="normal">5</span>
|
||||
<span class="normal">6</span>
|
||||
<span class="normal">7</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">django</span> <span class="kn">import</span> <span class="n">forms</span>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">django</span> <span class="kn">import</span> <span class="n">forms</span>
|
||||
<span class="kn">from</span> <span class="nn">nocaptcha_recaptcha.fields</span> <span class="kn">import</span> <span class="n">NoReCaptchaField</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">AppForm</span><span class="p">(</span><span class="n">forms</span><span class="o">.</span><span class="n">Form</span><span class="p">):</span>
|
||||
|
|
@ -861,31 +615,18 @@ been done for us. Update at your convenience, You might end up with something l
|
|||
<span class="n">background</span> <span class="o">=</span> <span class="n">forms</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">label</span><span class="o">=</span><span class="s1">'Background'</span><span class="p">)</span>
|
||||
<span class="n">captcha</span> <span class="o">=</span> <span class="n">NoReCaptchaField</span><span class="p">()</span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</div>
|
||||
<p>As you see, we added a line of import (line 2) and a field in our form.</p>
|
||||
<p>And lastly, we need to update our HTML file to add in the Google library. You can open
|
||||
<code class="docutils literal notranslate"><span class="pre">web/chargen/templates/chargen/create.html</span></code>. There’s only one line to add:</p>
|
||||
<div class="highlight-html notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="p"><</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">"https://www.google.com/recaptcha/api.js"</span> <span class="na">async</span> <span class="na">defer</span><span class="p">></</span><span class="nt">script</span><span class="p">></span>
|
||||
<div class="highlight-html notranslate"><div class="highlight"><pre><span></span><span class="p"><</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">"https://www.google.com/recaptcha/api.js"</span> <span class="na">async</span> <span class="na">defer</span><span class="p">></</span><span class="nt">script</span><span class="p">></span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</div>
|
||||
<p>And you should put it at the bottom of the page. Just before the closing body would be good, but
|
||||
for the time being, the base page doesn’t provide a footer block, so we’ll put it in the content
|
||||
block. Note that it’s not the best place, but it will work. In the end, your
|
||||
<code class="docutils literal notranslate"><span class="pre">web/chargen/templates/chargen/create.html</span></code> file should look like this:</p>
|
||||
<div class="highlight-html notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
||||
<span class="normal"> 2</span>
|
||||
<span class="normal"> 3</span>
|
||||
<span class="normal"> 4</span>
|
||||
<span class="normal"> 5</span>
|
||||
<span class="normal"> 6</span>
|
||||
<span class="normal"> 7</span>
|
||||
<span class="normal"> 8</span>
|
||||
<span class="normal"> 9</span>
|
||||
<span class="normal">10</span>
|
||||
<span class="normal">11</span>
|
||||
<span class="normal">12</span>
|
||||
<span class="normal">13</span>
|
||||
<span class="normal">14</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span>{% extends "base.html" %}
|
||||
<div class="highlight-html notranslate"><div class="highlight"><pre><span></span>{% extends "base.html" %}
|
||||
{% block content %}
|
||||
<span class="p"><</span><span class="nt">h1</span><span class="p">></span>Character Creation<span class="p"></</span><span class="nt">h1</span><span class="p">></span>
|
||||
{% if user.is_authenticated %}
|
||||
|
|
@ -900,7 +641,7 @@ block. Note that it’s not the best place, but it will work. In the end, your
|
|||
<span class="p"><</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">"https://www.google.com/recaptcha/api.js"</span> <span class="na">async</span> <span class="na">defer</span><span class="p">></</span><span class="nt">script</span><span class="p">></span>
|
||||
{% endblock %}
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</div>
|
||||
<p>Reload and open <a class="reference external" href="http://localhost:4001/chargen/create/">http://localhost:4001/chargen/create</a> and
|
||||
you should see your beautiful CAPCHA just before the “submit” button. Try not to check the checkbox
|
||||
to see what happens. And do the same while checking the checkbox!</p>
|
||||
|
|
@ -992,7 +733,7 @@ to see what happens. And do the same while checking the checkbox!</p>
|
|||
<h3>Versions</h3>
|
||||
<ul>
|
||||
<li><a href="Web-Character-Generation.html">1.0-dev (develop branch)</a></li>
|
||||
<li><a href="../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
<li><a href="../../0.95/index.html">0.95 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue