Django设置语言和时区
忘记几次,还是打算记下来,虽然就三行。
1 | # Internationalization |
最后一个才是重点,否则保存时间的时候,还是使用UTC的时间。
忘记几次,还是打算记下来,虽然就三行。
1 | # Internationalization |
最后一个才是重点,否则保存时间的时候,还是使用UTC的时间。
总会遇到有些自定义的包或者自己生成的app需要放到一些特定的目录下,方便项目维护,让目录结构更加清晰。
但是把模块移动到非项目根目录下后,会遇到import错误。
这个时候需要设置下环境变量,将我们的目录加入到django运行时的环境变量中。
具体方法是,导入sys模块,插入自己的新目录地址。
我这里的样例如下:
1 | import sys |
Django已经给我们提供了一个用户模型,但是它的字段不多,在某些场景下无法满足我们的使用需求,所以我们还要重新定义个数据模型,来描述我们用户数据表。
原来的auth_user
表
1 | +--------------+--------------+------+-----+---------+----------------+ |
编辑我们的新建的用户app的models.py
先import AbstractUser,然后定义我们的类的时候,继承它就好了。
1 | from django.contrib.auth.models import AbstractUser |
完事后在settings.py
注册我们的app,
再加上一条AUTH_USER_MODEL = "users.UserProfile"
指定我们新的用户模型
生成数据表
1 | makemigrations users |
增加后新的表
1 | MySQL [opencourse]> desc users_userprofile; |
done.
先导入自己的数据模型from .models import UserMessage
1 | user_message = UserMessage() |
结果:
1 | MySQL [opencourse]> select * from message_usermessage; |
删除的话,调用继承过来的delete()
方法即可。
下面删除ID为1的结果
1 | user_message = UserMessage.objects.filter(id=1) |
可以直接user_message.delete()
所有符合结果的都删除,或者遍历删除,看情况选择使用。
1 | for message in user_message: |
两种方法
1 | user_message = UserMessage.objects.filter(id=1) |
或者
1 | user_message = UserMessage.objects.get(id=1) |
结果
1 | 第一种方法 |
查询方法还是灵活多变的。filter和get区别。
简单来说get的如果多于两条数据,或者没有数据就会报错,它返回对象形式。而filter会返回数组形式。
1 | UserMessage.objects.all() |
django是通过ORM访问数据库的,所以,它需要自己定义数据模型。
打开相应app/models.py
1 | class UserMessage(models.Model): |
定义字段,字段类型,长度,描述名。
除了上诉的字符类型,还有以下的数据类型可以定义
1 | __all__ = [str(x) for x in ( |
在<path-to-your-project>/settings.py
添加自己的app到INSTALLED_APPS
1 | INSTALLED_APPS = [ |
然后运行命令
1 | manage.py@opencourse > makemigrations message |
这个时候就可以看到数据库已经生成了一个新的表:
1 | MySQL [opencourse]> show tables; |
除此之外,还可以定义索引,自定义表名等。
##参考资料
在相应的app下面找到views.py
<path-to-your-app>/views.py
1 | def getform(request): |
因为模板引用了一些静态资源,但是你得告诉django它路径在哪里。新增配置STATICFILES_DIRS
,指定静态URL。
1 | STATIC_URL = '/static/' |
编辑<path-to-your-project>/urls.py
先导入自己的app的getform方法,配置URL url(r'^form/$',getform)
1 | from <path-to-your-app>.views import getform |
done.
##更改配置
<project_name>/settings.py
一开始是使用sqlite3的,改成MySQL的就好
1 | DATABASES = { |
*如果没有安装MySQL驱动的,就
pip install MySQL-python
安装一个.如果出现错误,提示没有找到mysql_config的。
Ubuntu类的安装apt install libmysqlclient-dev
,Redhat类yum install -y mysql-devel
在确保安装了libmysqlclient-dev或者mysql-devel的同学,如果使用pycharm的话,直接File->Settins->Project Interpreter
点加号+
搜索mysql
,然后点击Install Package即可。
python manage.py makemigrations
,或者pycharm中,Tools->Run manage.py Task 直接输入makemigrations,然后migrate。
如下:
1 | manage.py@opencourse > makemigrations |
第一个print是100内的质数列表。
第二个是列表的数字求和
第三个是列表数字换成它的平方数
1 | #!/usr/bin/env python |
Output:
1 | [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] |
今天给测试环境配置https的时候遇到了问题。
先后排除了证书错误,防火墙,nginx -V确定相关模块存在,但是依然不行。
查看 nginx error日志
发现如下结果:
1 | 2017/11/22 12:18:11 [error] 18365#18365: *10 no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking, client: 120.197.49.xxx, server: 0.0.0.0:443 |
寻找资料,提到是监听了443端口,但是没有指定证书之类的东西。
于是我cat /etc/nginx/conf.d/* | grep 443
发现一条
1 | server { |
之前为了屏蔽空主机名瞎访问,我添加了一条80端口的,又想当然地配置了一个443的。
现在把这个注释掉,重启nginx。一切正常。