博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django学习笔记+使用技巧
阅读量:4053 次
发布时间:2019-05-25

本文共 7325 字,大约阅读时间需要 24 分钟。

>>1.在linux服务器上查看python的安装路径,linux服务器都是自带安装python的,所以不需要安装,查看服务器上的版本是否满足需求,如果不满足需求的话要重新安装。

查看安装路径的方法:
在任意目录下依次执行下面命令:
python
import sys
sys.path

>>2.linux相关问题

1.linux系统中有没有注册表的概念?
没有,但有跟注册表相对应的文件,比方说安装软件后它会把这个软件的配置写到一个配置文件里面。

2.linux系统中怎样安装软件和删除软件?

3.linux系统中安装了mysql后,还可以在其他目录安装mysql吗?其他软件呢?
4.linux系统中怎样查看已经安装了哪些软件?
5.linux系统中软件一般都安装在哪?像Windows都安装在program files目录下面
6.linux系统中怎样在线安装软件?

>>3.下载链接
apache服务器下载

mod_python下载链接

mod_wsgi

>>4.Ubuntu在线安装mysql:
sudo apt-get install mysql
在线安装必须本地没有安装过此软件,不然会报错,可以先卸载然后再在线安装

>>5.一些常用命令

find / -name mysql 查询当前目录下有没有名字为mysql的文件或目录。
service mysql start 启动mysql服务
mysql -u root -p 登录mysql,执行这个命令后会让输入密码,如下所示:
Enter password:qweasd123
输入密码后就可以登录进去了。

>>6.python版本升级

每个版本都有对应的一套插件,可以都安装下来,它们之间不会产生影响,升级的时候只需要修改一下系统环境变量path就行了。
主要就是把Python26改成Python27,改后path里面关于python的路径如下所示:
C:\Python27;C:\Python27\Lib\site-packages\django\bin

>>7.请注意 action 为 /add/ ,在 Django 中链接后面一般都要有 '/' ,不然有可能得不到 POST 数据。有关更详细的关于常见问题可以参阅 NewbieMistakes 文档。

>>8.在 form 中的 method="post" 。你当然可以使用 get ,但是在 Django 的设计风格中认为,使用 POST 表示要对数据进行修改,使用 GET 则只是获取,这是一个设计风格,并且不仅仅属于 Django 。如果能够养成习惯是非常好的。

>>9.在python编码中如果有中文的话要显示指定编码格式,在程序的第一行指定,如下所示:

#encoding=utf-8
指定后原来程序里面的中文会变成乱码,这时候可以按Ctrl+Z键取消操作,这时候中文会正常显示过来,然后再按Ctrl+S保存,这样就可以实现修改编码了。

>>10.从对模板的使用 (wiki/edit.html) 可以猜到在后面我们要在 templates 中创建子目录了。的确,对于不同的 app ,我们可以考虑将所有的模板都放在统一的 templates 目录下,但为了区分方便,一般都会针对 app 创建不同的子目录。当然也可以不这样,可以放在其它的地方,只要修改 settings.py ,将新的模板目录加进去就行了。

>>11.在 Django 中每个字段都可以有一个提示文本,它是第一个参数,如果没有则会使用字段名。因此我定义的每个字段为了方便都有一个对应的汉字提示文本。

#coding=utf-8
from django.db import models

# Create your models here.

class Address(models.Model):

    name = models.CharField('姓名', max_length=6, unique=True)
    gender = models.CharField('性别', choices=(('M', '男'), ('F', '女')),
        max_length=1, radio_admin=True)
    telphone = models.CharField('电话', max_length=20)
    mobile = models.CharField('手机', max_length=11)

>>12.unexpected keyword argument 'maxlength'

解决办法吧maxlength改为max_length就可以了

>>13.Django模板:

当使用django的时候,如果模板里面有中文,则支持不是很好,需要在第1行加入
{#utf-8#}

这样就可以正常显示了

>>14.

import os
print os.path.dirname(os.path.dirname("C:/Documents and Settings/dashan.yin/ab/"))

os.path.dirname("C:/test1/test2/") # 返回C:/test1/test2

os.path.dirname(os.path.dirname("C:/test1/test2/")) # 返回C:/test1
相当于两次执行dirname操作得到的是当前目录的父目录。

>>15.此模板从基础模板base.html 继承,注意继承的时候路径要带上应用名称art

{% extends "art/base.html" %}
  
>>16.django1.4跟之前版本在form上的区别:
from django import newforms as forms在django1.4版本中要改成:from django import forms

在django以前的版本中,把django项目发布到apache服务器上时有两个地方需要注意:

一是在settings.py文件中要把DEBUG = True改成DEBUG = False
二是要关掉django项目自带的小型服务器
但在django1.4中,这两点都取消了,不需要这些限制。
(看来当初选择django1.4还是不错的,还有就是有问题多看看官方文档)

>>17.在html文件中注释有可能影响程序,比方说下面这段代码:
<!--对基础模板中的{% block head %}{% endblock %}部分进行修改-->
{% block head %}用户注册{% endblock %}
会报这样的错误:
'block' tag with name 'head' appears more than once
意思就是出现多个head标签

>>18.在命令行模式下用dir()命令查看当前路径下都有哪些文件和目录。

>>19.安装好apache后桌面右下角有个图标,退出程序时图标会消失,怎样让图标重新出现?

C:\Program Files\Apache Software Foundation\Apache2.2\bin目录下有个ApacheMonitor.exe文件,双击它就可以出现了。

>>20.解决403问题

分两种情况,一种是正常提交,另一种是用ajax提交
正常提交的话,每个表单后面都要有{% csrf_token %}这个标签,在views.py里面相应的方法有两种书写方式:
方法一:
c = {}
c.update(csrf(request))
return render_to_response('news/add.html',c)

方法二:

return render_to_response('news/add.html', {}, context_instance=RequestContext(request))
注意,对于方法二,一定要注意是在显示表单之前那个方法上面加上context_instance=RequestContext(request),就像下面这样:
对于登录窗口,显示登录窗口对应的views方法为:

def index(request):

    return render_to_response('account/login.html', {}, context_instance=RequestContext(request))

注意是在这个方法的return函数里面加上context_instance=RequestContext(request),而不是在响应提交按钮的那个views方法里面加。这一点尤其需要注意。

   

如果是ajax提交的话,要在整个项目的首页,加上这一段代码:
//新加处理ajax提交表单的处理方式
jQuery(document).ajaxSend(function(event, xhr, settings) {
    function getCookie(name) {
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
    function sameOrigin(url) {
        // url could be relative or scheme relative or absolute
        var host = document.location.host; // host + port
        var protocol = document.location.protocol;
        var sr_origin = '//' + host;
        var origin = protocol + sr_origin;
        // Allow absolute or scheme relative URLs to same origin
        return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||
            (url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||
            // or any other URL that isn't scheme relative or absolute i.e relative.
            !(/^(\/\/|http:|https:).*/.test(url));
    }
    function safeMethod(method) {
        return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
    }

    if (!safeMethod(settings.type) && sameOrigin(settings.url)) {

        xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
    }
});

views.py里面正常书写就行了,不需要做特殊处理:

return render_to_response('news/add.html')

关于csrf的处理一定要参照官方网站:

>>21.关于后台往前台推送的技术,一般都是用comet实现。

>>22.linux中的pwd命令?

pwd 命令代表“print working directory”(打印工作目录)。当你键入 pwd 时,你是在请你的 Linux 系统显示你的当前位置。
例如:

[root@teacher apache]# pwd

/tmp/apache

表明你当前正处在/tmp/apache目录中。

>>23.django中的views.py函数里面也可以断点调试:

Debug As -> Python Run

>>24.多用render_to_response,少用HttpResponseRedirect

#return HttpResponseRedirect("account/login.html")
return render_to_response("account/login.html", {}, context_instance=RequestContext(request))

这里有一个很重要的问题

如果要在页面使用user,那么页面必须要有request对象(为什么?因为user就是从request里面取的)
所以在渲染页面的时候。如果要使用这个验证,就必须要把request对象也渲染进去
我之前渲染页面就是用return render_to_response('index.html')
这样的话,只是单纯渲染页面。是不会把request传进去的。必须显式的指定
加入context_instanse=RequestContext(request)才有办法在页面使用
但是每次render都这样写是不是很烦?
django1.3新增了一个shortcut
render
其实就是一默认使用RequestContext的render_to_response
这个方法除了有一个必须的第一个参数 request外,和render_to_response都一样

使用传统的页面重定向,是默认会带入request的,如使用HttpResponseRedirect

正确的代码:

return render_to_response('index.html',context_instanse=RequestContext(request)) 

或者用django1.3新增的render

return render(request,'index.html')

 

>>25.django的模板系统中也有注释,注释采用{# #}表示

{# This is a comment #}
注释的内容不会在模板渲染时输出。

>>26.时间字段

regdate=models.DateTimeField("注册时间",auto_now_add=True)
lasttime=models.DateTimeField("上次登录时间",auto_now=True)

>>27.编码的时候把一些代码注释掉可能并没有起到效果,所以最好选择把它删掉。

>>28.修改django项目名称

轻易不要修改django项目名称,一般情况下第一次会修改成功,再修改的时候就会报错,这个时候只要刷新一下项目,然后就又可以修改一次。不建议修改django项目名称还有一点就是在settings.py文件中有几处需要修改,这一点跟java项目不同。所以不得万不得已不要修改django项目名称。

文件系统不同步问题resource is out of sync with the file system的解决办法

查阅资料后发现这是文件系统不同步的问题,是因为在eclipse之外对工程中的resource进行修改引起的;但是,有时没有在eclipse之外进行修改,也会报类似的错误。

解决办法:需要手动刷新一下资源管理器。
刷新下 就行了。

>>29.要想在模板中获得session中的值,必须渲染模板,也就是在返回函数中加上下面一个参数:

context_instance=RequestContext(request)

然后像下面这样取值:

{% if user.is_authenticated %}	Session中用户名:{
{ request.user.username }}{% endif %}

 

 

>>30.使用print测试python程序

整个django项目中,在views.py文件里面写print "hello"这样的语句是不会运行的,所以不能在cosole里输出要查看的变量的值,今天突然意识到一个调试的好方法,而且不用每次都重启服务器,在任何一个views.py里面都可以运行。

那就是加上这几行代码:

if __name__ == "__main__":    username = "username"    password = "password"        login_ldap(username, password)    print "success"

这样直接在该views.py文件里面,点右键->Run As -> Python Run,这样就直接可以执行print语句了。

 也可进行断点调试,设置断点,点右键->Debug As -> Python Run,同样可以执行print语句

 

 >>31.在js中判断某个对象是否已经定义:

 

判断当前frame是否子frame还是top frame:

 

>>32.在dwz中target="ajaxToDo"中有callback属性以及字段排序功能:

 

 

 

转载地址:http://ykxci.baihongyu.com/

你可能感兴趣的文章
AsyncTask、View.post(Runnable)、ViewTreeObserver三种方式总结frame animation自动启动
查看>>
Android中AsyncTask的简单用法
查看>>
概念区别
查看>>
Idea下安装Lombok插件
查看>>
zookeeper
查看>>
Idea导入的工程看不到src等代码
查看>>
技术栈
查看>>
8.X版本的node打包时,gulp命令报错 require.extensions.hasownproperty
查看>>
Jenkins 启动命令
查看>>
Maven项目版本继承 – 我必须指定父版本?
查看>>
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>
利用清华镜像站解决pip超时问题
查看>>
微信小程序开发全线记录
查看>>
CCF 分蛋糕
查看>>
解决python2.7中UnicodeEncodeError
查看>>
小谈python 输出
查看>>
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
查看>>
python:如何将excel文件转化成CSV格式
查看>>
机器学习实战之决策树(一)
查看>>
机器学习实战之决策树二
查看>>