安装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)