advanced.html 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title>1 Advanced &mdash; Flask-Maple 0.8 documentation</title>
  7. <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
  8. <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
  9. <script type="text/javascript">
  10. var DOCUMENTATION_OPTIONS = {
  11. URL_ROOT: './',
  12. VERSION: '0.8',
  13. COLLAPSE_INDEX: false,
  14. FILE_SUFFIX: '.html',
  15. HAS_SOURCE: true
  16. };
  17. </script>
  18. <script type="text/javascript" src="_static/jquery.js"></script>
  19. <script type="text/javascript" src="_static/underscore.js"></script>
  20. <script type="text/javascript" src="_static/doctools.js"></script>
  21. <link rel="top" title="Flask-Maple 0.8 documentation" href="index.html" />
  22. <link rel="prev" title="1 Introduction To Flask-Maple" href="introduction.html" />
  23. <link rel="stylesheet" href="_static/custom.css" type="text/css" />
  24. <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
  25. </head>
  26. <body role="document">
  27. <div class="document">
  28. <div class="documentwrapper">
  29. <div class="bodywrapper">
  30. <div class="body" role="main">
  31. <div class="section" id="advanced">
  32. <h1>1 Advanced<a class="headerlink" href="#advanced" title="Permalink to this headline">¶</a></h1>
  33. <div class="section" id="bootstrap">
  34. <h2>1.1 Bootstrap<a class="headerlink" href="#bootstrap" title="Permalink to this headline">¶</a></h2>
  35. <p>You can add you .js file or .css file with flask-assets</p>
  36. <div class="highlight-python"><div class="highlight"><pre><span></span><span class="n">maple</span> <span class="o">=</span> <span class="n">MapleBootstrap</span><span class="p">(</span><span class="n">css</span><span class="o">=</span><span class="p">(</span><span class="s1">&#39;style/xxx.css&#39;</span><span class="p">,),</span><span class="n">js</span><span class="o">=</span><span class="p">(</span><span class="s1">&#39;style/xxx.js&#39;</span><span class="p">,))</span>
  37. <span class="n">maple</span><span class="o">.</span><span class="n">init_app</span><span class="p">(</span><span class="n">app</span><span class="p">)</span>
  38. </pre></div>
  39. </div>
  40. <p>or you can add js or css in <strong>templates</strong></p>
  41. <div class="highlight-html"><div class="highlight"><pre><span></span>{% block style -%}
  42. {{super()}}
  43. You css file
  44. {% endblock -%}
  45. {% block script -%}
  46. {{super()}}
  47. You js file
  48. {% endblock -%}
  49. </pre></div>
  50. </div>
  51. <p>other <strong>block</strong></p>
  52. <div class="highlight-html"><div class="highlight"><pre><span></span>{% block title -%}
  53. {% endblock -%}
  54. </pre></div>
  55. </div>
  56. </div>
  57. <div class="section" id="error">
  58. <h2>1.2 Error<a class="headerlink" href="#error" title="Permalink to this headline">¶</a></h2>
  59. <p>You can custom you template for error</p>
  60. <div class="highlight-html"><div class="highlight"><pre><span></span>templates/templet/error_404.html
  61. templates/templet/error_403.html
  62. templates/templet/error_500.html
  63. </pre></div>
  64. </div>
  65. </div>
  66. <div class="section" id="auth">
  67. <h2>1.3 Auth<a class="headerlink" href="#auth" title="Permalink to this headline">¶</a></h2>
  68. <p><strong>Auth</strong> api</p>
  69. <div class="highlight-python"><div class="highlight"><pre><span></span><span class="n">Auth</span><span class="p">(</span><span class="n">app</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">db</span><span class="o">=</span><span class="n">none</span><span class="p">,</span> <span class="n">mail</span><span class="o">=</span><span class="n">none</span><span class="p">,</span> <span class="n">user_model</span><span class="o">=</span><span class="n">none</span><span class="p">,</span> <span class="n">use_principal</span><span class="o">=</span><span class="n">false</span><span class="p">,</span>
  70. <span class="n">login_form</span><span class="o">=</span><span class="n">loginform</span><span class="p">,</span> <span class="n">register_form</span><span class="o">=</span><span class="n">registerform</span><span class="p">,</span> <span class="n">forget_form</span><span class="o">=</span><span class="n">forgetpasswordform</span><span class="p">):</span>
  71. </pre></div>
  72. </div>
  73. <p><strong>db</strong></p>
  74. <div class="highlight-python"><div class="highlight"><pre><span></span><span class="n">db</span> <span class="o">=</span> <span class="n">SQLAlchemy</span><span class="p">(</span><span class="n">app</span><span class="p">)</span>
  75. <span class="n">app</span> <span class="o">=</span> <span class="n">Flask</span><span class="p">(</span><span class="n">__name__</span><span class="p">)</span>
  76. <span class="n">app</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">from_object</span><span class="p">(</span><span class="n">Config</span><span class="p">)</span>
  77. <span class="n">db</span> <span class="o">=</span> <span class="n">SQLAlchemy</span><span class="p">(</span><span class="n">app</span><span class="p">)</span>
  78. <span class="n">maplec</span> <span class="o">=</span> <span class="n">MapleCaptcha</span><span class="p">(</span><span class="n">app</span><span class="p">)</span>
  79. <span class="n">mapleb</span> <span class="o">=</span> <span class="n">MapleBootstrap</span><span class="p">(</span><span class="n">app</span><span class="p">)</span>
  80. <span class="n">mail</span> <span class="o">=</span> <span class="n">Mail</span><span class="p">(</span><span class="n">app</span><span class="p">)</span>
  81. <span class="n">babel</span> <span class="o">=</span> <span class="n">Babel</span><span class="p">(</span><span class="n">app</span><span class="p">)</span>
  82. </pre></div>
  83. </div>
  84. <p><strong>mail</strong></p>
  85. <div class="highlight-python"><div class="highlight"><pre><span></span><span class="n">mail</span> <span class="o">=</span> <span class="n">Mail</span><span class="p">(</span><span class="n">app</span><span class="p">)</span>
  86. </pre></div>
  87. </div>
  88. <p><strong>user_model</strong></p>
  89. <div class="highlight-python"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">User</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Model</span><span class="p">,</span> <span class="n">UserMixin</span><span class="p">):</span>
  90. <span class="nb">id</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span> <span class="n">primary_key</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
  91. <span class="n">username</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">80</span><span class="p">),</span> <span class="n">unique</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
  92. <span class="n">email</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">120</span><span class="p">),</span> <span class="n">unique</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
  93. <span class="n">password</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">120</span><span class="p">),</span> <span class="n">unique</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
  94. <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  95. <span class="k">return</span> <span class="s1">&#39;&lt;User </span><span class="si">%r</span><span class="s1">&gt;&#39;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
  96. <span class="nd">@staticmethod</span>
  97. <span class="k">def</span> <span class="nf">set_password</span><span class="p">(</span><span class="n">password</span><span class="p">):</span>
  98. <span class="n">pw_hash</span> <span class="o">=</span> <span class="n">generate_password_hash</span><span class="p">(</span><span class="n">password</span><span class="p">)</span>
  99. <span class="k">return</span> <span class="n">pw_hash</span>
  100. <span class="k">def</span> <span class="nf">check_password</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">password</span><span class="p">):</span>
  101. <span class="k">return</span> <span class="n">check_password_hash</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">password</span><span class="p">,</span> <span class="n">password</span><span class="p">)</span>
  102. </pre></div>
  103. </div>
  104. <p><strong>use_principal</strong>
  105. if you use flask-principal,then set <em>use_principal = True</em></p>
  106. <p><strong>form</strong>
  107. You can customize form</p>
  108. <p><strong>Custom Model</strong></p>
  109. <div class="section" id="register-models">
  110. <h3>1.3.1 register_models<a class="headerlink" href="#register-models" title="Permalink to this headline">¶</a></h3>
  111. <div class="highlight-python"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">flask_maple</span> <span class="kn">import</span> <span class="n">Auth</span>
  112. <span class="k">class</span> <span class="nc">MyAuth</span><span class="p">(</span><span class="n">Auth</span><span class="p">):</span>
  113. <span class="k">def</span> <span class="nf">register_models</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">form</span><span class="p">):</span>
  114. <span class="n">user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">User</span><span class="p">()</span>
  115. <span class="n">user</span><span class="o">.</span><span class="n">username</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">username</span><span class="o">.</span><span class="n">data</span>
  116. <span class="n">user</span><span class="o">.</span><span class="n">password</span> <span class="o">=</span> <span class="n">user</span><span class="o">.</span><span class="n">set_password</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">password</span><span class="o">.</span><span class="n">data</span><span class="p">)</span>
  117. <span class="n">user</span><span class="o">.</span><span class="n">email</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">email</span><span class="o">.</span><span class="n">data</span>
  118. <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">user</span><span class="p">)</span>
  119. <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
  120. <span class="k">return</span> <span class="n">user</span>
  121. </pre></div>
  122. </div>
  123. </div>
  124. <div class="section" id="confirm-models">
  125. <h3>1.3.2 confirm_models<a class="headerlink" href="#confirm-models" title="Permalink to this headline">¶</a></h3>
  126. <div class="highlight-python"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">MyAuth</span><span class="p">(</span><span class="n">Auth</span><span class="p">):</span>
  127. <span class="k">def</span> <span class="nf">confirm_models</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user</span><span class="p">):</span>
  128. <span class="n">user</span><span class="o">.</span><span class="n">is_confirmed</span> <span class="o">=</span> <span class="bp">True</span>
  129. <span class="n">user</span><span class="o">.</span><span class="n">confirmed_time</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
  130. <span class="n">user</span><span class="o">.</span><span class="n">roles</span> <span class="o">=</span> <span class="s1">&#39;writer&#39;</span>
  131. <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
  132. </pre></div>
  133. </div>
  134. </div>
  135. <div class="section" id="email-models">
  136. <h3>1.3.3 email_models<a class="headerlink" href="#email-models" title="Permalink to this headline">¶</a></h3>
  137. <div class="highlight-python"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">MyAuth</span><span class="p">(</span><span class="n">Auth</span><span class="p">):</span>
  138. <span class="k">def</span> <span class="nf">email_models</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  139. <span class="n">current_user</span><span class="o">.</span><span class="n">send_email_time</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
  140. <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
  141. </pre></div>
  142. </div>
  143. </div>
  144. </div>
  145. </div>
  146. </div>
  147. </div>
  148. </div>
  149. <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
  150. <div class="sphinxsidebarwrapper">
  151. <h3><a href="index.html">Table Of Contents</a></h3>
  152. <ul>
  153. <li><a class="reference internal" href="#">1 Advanced</a><ul>
  154. <li><a class="reference internal" href="#bootstrap">1.1 Bootstrap</a></li>
  155. <li><a class="reference internal" href="#error">1.2 Error</a></li>
  156. <li><a class="reference internal" href="#auth">1.3 Auth</a><ul>
  157. <li><a class="reference internal" href="#register-models">1.3.1 register_models</a></li>
  158. <li><a class="reference internal" href="#confirm-models">1.3.2 confirm_models</a></li>
  159. <li><a class="reference internal" href="#email-models">1.3.3 email_models</a></li>
  160. </ul>
  161. </li>
  162. </ul>
  163. </li>
  164. </ul>
  165. <div class="relations">
  166. <h3>Related Topics</h3>
  167. <ul>
  168. <li><a href="index.html">Documentation overview</a><ul>
  169. <li>Previous: <a href="introduction.html" title="previous chapter">1 Introduction To Flask-Maple</a></li>
  170. </ul></li>
  171. </ul>
  172. </div>
  173. <div role="note" aria-label="source link">
  174. <h3>This Page</h3>
  175. <ul class="this-page-menu">
  176. <li><a href="_sources/advanced.txt"
  177. rel="nofollow">Show Source</a></li>
  178. </ul>
  179. </div>
  180. <div id="searchbox" style="display: none" role="search">
  181. <h3>Quick search</h3>
  182. <form class="search" action="search.html" method="get">
  183. <input type="text" name="q" />
  184. <input type="submit" value="Go" />
  185. <input type="hidden" name="check_keywords" value="yes" />
  186. <input type="hidden" name="area" value="default" />
  187. </form>
  188. </div>
  189. <script type="text/javascript">$('#searchbox').show(0);</script>
  190. </div>
  191. </div>
  192. <div class="clearer"></div>
  193. </div>
  194. <div class="footer">
  195. &copy;2016, honmaple.
  196. |
  197. Powered by <a href="http://sphinx-doc.org/">Sphinx 1.4.1</a>
  198. &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
  199. |
  200. <a href="_sources/advanced.txt"
  201. rel="nofollow">Page source</a>
  202. </div>
  203. </body>
  204. </html>