<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="http://itecfun.com/extern.php?action=feed&amp;tid=107&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[个人知识管理站 / Python Django进行web开发的一些知识点总结--django快速上手]]></title>
		<link>http://www.itecfun.com/viewtopic.php?id=107</link>
		<description><![CDATA[Python Django进行web开发的一些知识点总结--django快速上手 最近发表的帖子。]]></description>
		<lastBuildDate>Wed, 11 Feb 2015 00:38:30 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[Python Django进行web开发的一些知识点总结--django快速上手]]></title>
			<link>http://www.itecfun.com/viewtopic.php?pid=193#p193</link>
			<description><![CDATA[<p>所谓的web开发就是使用程序进行网页、网站的开发工作，我个人觉得web开发做的最多的还是java，php，大概是我之前接触的只有这两个吧，最近再做python django的web开发，大致说说自己的一些学习心得。<br />web开发其实比应用程序开发简单很多，因为逻辑简单，数据结构简单，原理都是一样的。web开发的原理大致是一下：</p><p><strong>1.基本的数据处理方法</strong><br />这个就是python的基本语法，能够知道python的四则运算、字符串处理、集合类处理（python里面叫序列[]和字典{}）。<br />所谓的序列，就是相同元素的一个集合，也就是数组，使用[]定义。python中对于序列的操作中，分片操作是最好用的，也是最常用的。python中字符串就是一个字符的序列，操作基本和序列相同。<br />所谓字典，就是大家都知道的hash表，通过{}定义，键值对存储方式，按照键值取值速度很快。通过.keys()、.values()这个两个方法可以分别返回字典的键序列（数组）、值序列（数组）。</p><p><strong>2.html，css，js</strong><br />这些语言都是用于web页面展示的，如果不需要做的很好看，你只需要知道简单的html即可了。这部分我就不多说了，如果还不懂，先学这些。</p><p><strong>3.URL访问映射</strong><br />在php或者java中，一般都是通过目录层次结构来访问remote远程文件，然后在这个被访问的文件中做相应的数据接受和处理操作。<br />在django中，是采用urls.py进行映射的。例如：</p><div class="codebox"><pre><code>url(r&#039;^report/$&#039;, &#039;report.views.report&#039;),</code></pre></div><br /><p>例如urls.py中配置的这一行，表示所有以report结尾（不算?后面的get参数）的url，请求都发送到report包下面的views.py中的report方法。<br />另外需要说明一下的是django中html中引用link的css，js的文件，也是需要遵守上面的这个连接转发原则。所以一般会为这些资源文件作一个映射，如下所示：</p><div class="codebox"><pre><code>	(r&#039;^res/(?P&lt;path&gt;.*)&#039;, &#039;django.views.static.serve&#039;, {&#039;document_root&#039;:settings.RES_DIR}), #resourse url</code></pre></div><br /><p>其中settings.RES_DIR是自己新增配置是在setting.py文件中：</p><div class="codebox"><pre><code>	RES_DIR = os.path.join(os.path.dirname(__file__), &#039;../report/templates/res&#039;).replace(&#039;\\&#039;,&#039;/&#039;)</code></pre></div><br /><p>相当于指定一个资源目录，比如我的资源目录是在../report/templates/res这个里面。做了这个配置之后，相当与以后资源文件请求中的/res/...全部映射到../report/templates/res中。</p><p><strong>4.后台数据渲染到html</strong><br />后台数据渲染到html，或者说后台数据如何传输到前端html，在django中，有非常方便的模版，使用起来非常的方便。大致说一说：</p><div class="codebox"><pre><code>index_temp = loader.get_template(&#039;index.htm&#039;)
datas = {}
datas[&#039;html_title&#039;] = &#039;JsHintAuto管理的项目列表&#039;
datas[&#039;projects&#039;] = [{&#039;key&#039;:&#039;wzw&#039;,&#039;name&#039;:&#039;wzw&#039;,&#039;date&#039;:&#039;wzw&#039;,&#039;description&#039;:&#039;wzw&#039;,},{&#039;key&#039;:&#039;cxl&#039;,&#039;name&#039;:&#039;cxl&#039;,&#039;date&#039;:&#039;cxl&#039;,&#039;description&#039;:&#039;cxl&#039;,}]
index_context = Context(datas) 
return HttpResponse(index_temp.render(index_context))</code></pre></div><p>就是说使用index.htm这个html模版，然后传入的数据为index_context（Context），最后调用HttpResponse( index_temp.render( index_context ) )即可完成渲染。在模版index.htm中使用{{html_title}}的方式进行访问这个变量，而对于序列字典的访问都是使用点（.）号，例如：</p><div class="codebox"><pre><code> 
{% for project in projects %}
&lt;tr&gt; 
  &lt;td&gt; 
    &lt;h3 class=&quot;h3&quot;&gt;       
     &lt;a href=&quot;/report/?p={{project.key}}&quot;&gt;{{project.name}}&lt;/a&gt;
      &lt;span class=&quot;desc&quot;&gt;于{{project.date}}加入系统 &gt;&gt; &lt;a href=&quot;/admin/?p={{project.key}}&quot;&gt;{{manage_word}}&lt;/a&gt;&lt;/span&gt;
    &lt;/h3&gt;  &lt;div class=&quot;post&quot;&gt; &lt;p&gt;描述:&lt;/p&gt;{{project.description}}  &lt;/div&gt;
  &lt;/td&gt; 
&lt;/tr&gt; 
{% endfor %}</code></pre></div><br /><p><strong>5.表单get和post提交，以及django后台数据的获得</strong><br />django中views.py里面的方法都具有一个参数是request，利用这个request可以获得get和post数据，例如：</p><div class="codebox"><pre><code>	username = req.GET[&#039;username&#039;]rnpassword = req.POST[&#039;password&#039;]</code></pre></div><br /><p>另外，django处理form表单post请求的时候，会出现错误“CSRF verification failed. Request aborted.”这个问题网上有很多的解决方式，可以参考，但是最简单的处理方式如下：</p><div class="codebox"><pre><code>	@csrf_exemptrndef loginValid(req):rn    passrn    #...</code></pre></div><p>即在请求的那个方法上面加上一句注解：@csrf_exempt</p><p><strong>6.身份验证session的使用</strong></p><p>和post和get数据一样，session也可以通过request得到，不同的是session是request的一个属性，使用request.session就可以得到，session存储方式和字典是一样的，即：</p><div class="codebox"><pre><code>	request.session[&#039;user&#039;] = username #设置sessionrnusername = request.session[&#039;user&#039;] #获得session</code></pre></div><p>初次使用session，会报错“django no such table: django_session”，解决办法网上也很多，我这里也说一下：在cmd中切换到你的django项目中，执行python manage.py syncdb即可。<br /><strong>7.本地存储cookie的使用</strong></p><p>目前没有使用过，大致猜测应该是和session一样的，request.cookie进行访问和赋值。后面再看看更新一下。<br /><strong>8.数据持久化</strong><br />即：python和数据库之间的操作，利用python的第三方数据库驱动，可以方便的连接数据库，sqllite挺好用的一个小数据库，django后续版本中自带sqllite的驱动。<br />数据库那么多，其他的我就不一一介绍了。然后就是如何使用python和第三方的数据库驱动访问数据库，执行sql语句等等。<br />总结<br />写得比较简略，不过我个人觉得上面的这几点基本说出了基本的web开发中的要点，掌握这几点，作一个简单的网站基本没有什么问题，但是对于高并发，大数据相关的，继续好好学习吧。<br />对于django的web开发，如果掌握上面的几点，加上自己之前的web开发经验，我想迅速掌握上手开发，应该是不存在问题的</p><p>原文链接：http://cloudbbs.org/forum.php?mod=viewthread&amp;tid=26232</p>]]></description>
			<author><![CDATA[dummy@example.com (xuyg)]]></author>
			<pubDate>Wed, 11 Feb 2015 00:38:30 +0000</pubDate>
			<guid>http://www.itecfun.com/viewtopic.php?pid=193#p193</guid>
		</item>
	</channel>
</rss>
