django笔记

| 分类 django  | 标签 django  浏览次数: -

安装django

源码安装

进入django目录执行 python setup.py install 进行安装

pip 安装

pip install Djagno==1.7

测试django是否安装成功

python -c “import django” python -c “django.VERSION”

创建Django项目

创建项目

django-admin.py startproject 项目名

  • 失败原因:.py默认打开方式变成了记事本,要改回Python打开

创建app

python manage.py startapp app名

在mytest->settings.py中设置

INSTALLED_APPS = {

  '加上app名'

}

模板页目录配置
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, 'templates'),
)

静态文件路径设置

STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
  • 如果在运行时,你看到权限拒绝的提示,你应当修改这个文件的权限。运行命令 chmod +x django-admin.py

虽然 django 自带的这个 web服务器对于开发很方便,但是,千万不要在正式的应用布署环境中使用它。 在同一时间,该服务器只能可靠地处理一次单个请求,并且没有进行任何类型的安全审计。

^ 、$

上箭头(^)要求表达式对字符串的头部进行匹配,($)美元符号则要求表达式对字符串的尾部进行匹配。

常见错误

  • ImpoetError:No module named ‘django.conf.urls.defaults’

原因:from django.conf.urls.defaults import * django1.5以后被取消了

  • 改为from django.conf.urls import * 则成功

t=template.Template(‘My name is .’)在cmd命令中直接输入python出现交互解释器后会报错,必须输入python manage.py shell出现交互解释器才不会报错

调用 t.render(c) 返回字符串, 解释器缺省显示这些字符串的 真实内容呈现 ,而不是打印这个变量的值。 要显示换行而不是 ‘\n’ ,使用 print 语句: print t.render(c) 。

  • ImportError:No module named ‘mysite.books’

原因:python是沿着他的搜索路径向下搜索文件,比如他的搜索路径有到mysite文件,而你又添上了mysite.books.models 这个路径,python会在misite文件夹里继续依次向下搜索mysite/books/models,因为mysite里面没有mysite文件夹,所以会显示没有books.models 这个模块。只要把settings.py中INSTALLED_APPS最后’mysite.books’,一行改成 ‘books’,就行

  • CommandError:App ‘books’ has migrations.Only the sqlmigrate and sqlflush commands can be used when an app has migrations.

原因:这是因为旧版本和新的版本命令已经不一样 的问题。写好自己的model以后可以换成这样的命令来生成数据库表:python manage.py makemigrations books然后: python manage.py sqlmigrate books 0001 这样就可以CREATE TABLE 了。

  • 出现如下错误
    OFFSET 0 LIMIT 2;
    Cannot fetch index base URL https://pypi.python.org/simple/
    Could no find any downloads that satisfy the requirement PyMySQL==0.6.6
    Cleaning up...
    No distributions at all found for PyMySQL==0.6.6
    Storing debug log for failure in C:\Useer\xjwk\pip\pip.log
    2003-Can't connect to MySQL server on 'localhost'(10038)
    
  • 解决方法:my.ini内容改为以下内容
[client]
port=3306
default-character-set=utf8

#客户端字符类型,与服务端一致就行,建议utf8
[mysqld]
port=3306
character_set_server=utf8

#服务端字符类型,建议utf8
basedir=C:\Program Files\MySQL\MySQL Server 5.6

#解压根目录
datadir=C:\Program Files\MySQL\MySQL Server 5.6\data

#解压根目录\data
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

[WinMySQLAdmin]
D:\软件\mysql-5.6.27-winx64.msi
#解压根目录\bin\mysqld.exe
  • 只有模板变量,字符串,整数和小数可以作为 {% ifequal %} 标签的参数。

注释

单行注释

Django模板语言同样提供代码注释。 注释使用 {# #} :用这种语法的注释不能跨越多行。

多行注释

如果要实现多行注释,可以使用 {% comment %} 模板标签,就像这样:

{% comment %}
This is a
multi-line comment.
{% endcomment %}

一个project包含很多个Django app以及对它们的配置。一个app是一套Django功能的集合,通常包括模型和视图,按Python的包结构的方式存在。

CSRF验证失败. 相应中断.

  • 1.在from表单里加入{% csrf_token %}
    这条语句

  • 2.添加@csrf装饰器

生成密码

  • 首先,引入模块:

from django.contrib.auth.hashers import make_password, check_password

  • 生成密码(每次密码不一致)

make_password(“qttc”, None, ‘pbkdf2_sha256’)

  • 检验密码

    既然每次生成的密文都不一样,如何验证用户提交过来的明文与密文匹配呢?这就靠check_password去做了,check_password使用非常简单,只需要告诉它明文和密文它就会返回False or True验证结果

text = "qttc"
passwd = make_password(text, None, 'pbkdf2_sha256')
print check_password(text, passwd)
  • 生成相同密码

如果你不想每次都生成不同的密文,可以把make_password的第二个函数给一个固定的字符串,比如:

make_password(text, “a”, ‘pbkdf2_sha256’)

只要是任意字符串就可以,并且可以多个。但不能为空

python2、python3

python3中map函数有很大变化,list(map())等于python2中的map()

python3中的_thread等于python2中的thread

invalid literal for int() with base 10:

原因:字符串类型无法插入数据库中为整型的变量

django 过滤器

查询全部数据,返回的是对象

temp = User.objects.all()

for i in temp:

  print('i:', i.id, i.nickname)

按username进行排序

res = User.objects.order_by('username')
for i in res:
  print('i:', i.id, i.nickname)

获取的表单数据与数据库进行比较

user = User.objects.filter(username__exact=username, password__exact=password)

学习资料

django cookies django book中文教程地址


上一篇 celery异步任务队列     下一篇 linux快捷键
目录导航