版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lzw2016/article/details/81490157
- pycharm中将一段代码整体左移 shift+tab,整体右移 tab
- settings.py中配置templates和static文件夹的根目录
- 添加
STATICFILES_DIRS=[os.path.join(BASE_DIR,'static')]
- TEMPLATES的DIRS也是这样配置
- 顺便提一句html文件中要
{% load staticfiles %}
来加载静态文件,样式也是通过<link rel="stylesheet" href="{% static 'css/style.css' %}">
- 添加
- models的常用字段类型 django模型的用法
models.CharField
models.EmailField
models.DateTimeField
models.IPAddressField IP地址
models.FileField 上传文件类型
models.ImageField 图片
models.IntegerField
- 字段中常用的参数
- max_length:像CharFiels必须指定长度
- null=False:是否为null,一般在Char和Text中不应该使用Null,而应该使用blank,null是纯粹是数据库的语法
- blank=False:是否为空
- default:默认值,如default=”
- verbose_name:设置字段名
- primary_key=False:是否为主键,如果不指定主键会默认表中增加一个主键 id
- editable=True:是否可以编辑,若为False,则不会在后台管理界面显示
- auto_now:Date和DateTime字段独有,每次修改都会将当前时间更新进去,
- 只有调用Model.save方法会调用,QuerySet.update方法将不会调用
- auto_now_add:同样Date和DateTime字段独有,但只保留第一次提交时的时间
- 模型和模型之间关系字段
- OneToOneField:一对一
- Foreignkey:外键,一对多
- ManyToManyField:多对多
- models更改后,必须再次通过makemigrations appname更新数据库迁移文件
返回结果也可知字段id
Migrations for 'message':
message\migrations\0002_auto_20180806_2204.py
- Remove field id from message
- Add field object_id to message
- Alter field address on message
- Alter field email on message
如示增加主键 object_id(主键必须要指定默认值,不然报错)
You are trying to add a non-nullable field ‘object_id’ to message without a default;
we can’t do that (the database needs something to populate existing rows).
- 然后再migrate appname迁移数据库
models中模型类中Meta类的定义
- verbose_name
- ordering:指定排序方式
- db_table:指定表名(不指定,数据库也会默认生成)
数据库表查询(Django自带了数据表查询工具objects)
- 模型类:Message
- Message.objects.all():返回所有Message对象(可迭代)
- Message.objects.filter(name=’lzw’,address=’南昌’):查询特定的对象,参数间的逗号表示and
数据库表增加数据
- 方法一
- 创建Message对象message
- 对message各个属性赋值
- 调用message.save()
- 方法二
- Message.objects.create(各个属性赋值)
- 方法三
- Message.objects.get_or_create(name=’lzw’,age=20,。。。)
- 这种方法是防止重复很好的方法,但是速度要相对慢些,返回一个元组,第一个为Person对象,第二个为True或False, 新建时返回的是True, 已经存在时返回False.
- 方法一
数据表删除数据
- message.delete()
- 使用很简单,先查询到特定的message对象,再调用delete方法
数据表更改数据
- message.update(address=’DaLian’)
- 同样是选出特点对象,并对某些属性更改;也可以多对个对象同时更改
Message.objects.all().update(address='BeiJing')
如何处理Post提交的表单数据
- Django要求post提交form表单时必须在标签中含有 {% csrf_token %}
post提交的数据会以字典形式返回,key就是模板中相应位置的name对应的值
<input id="name" type="text" name="name" class="error" placeholder="请输入您的姓名"/>
Django通过判断request的method属性来判断是POST还是GET请求
- request.method == “POST”
- 通过字典get()方法来获取提交的数据
- 如:
request.POST.get('name','')
,get第二个参数表示默认值
- 如:
- 然后再像上面所提的向数据表中增加数据一样,将用户提交信息注册到数据表中
- render可通过第三个字典参数向模板传入所需要展示的数据
django提供的模板语言
- {{ }}:显示数据
- {% if %}{% else %}{% endif %}
- {% ifequal a b %}{% endifequal %}:判断a是否等于b,等同于{% if a==b %}
- {% url name [参数(可选)]%}:在模板中指定跳转的url时,非常有用
- name是urls.py中指定的url(regex,views.方法,name=’XXX’)
- {% url ‘XXX’ %},好处在于如果regex更改,不需要修改模板中url相应写法
- 如:
<form action="{% url 'get_form' %}" method="post" class="smart-green">
- {% url namespace:name [参数(可选)]%}
- 和上面的区别在于url()中还要指明namespace,便于区分不同APP下出现相同name的函数匹配
模型类的内嵌Meta类的功能 Django中class Meta使用详解
- 用来定义模型类中一些行为特性
- 常用的一些选项
- get_latest_by
- get_latest_by
因为Django的管理方法中有个lastest()方法,就是得到近期一行记录。
假设你的数据模型中有 DateField 或 DateTimeField 类型的字段。你能够通过这个选项来指定lastest()是依照哪个字段进行选取的。- ordering:模型对象返回的记录结果集是按照哪个字段排序的,它能代替objects的order_by方法
ordering=['order_date']
//按订单升序排列
ordering=['-order_date']
//按订单降序排列,-表示降序
ordering=['?order_date']
//随机排序,?表示随机
ordering = ['-pub_date', 'author']
//对 pub_date 降序,然后对 author 升序
- db_table:用于指定自己定义数据库表名的
若不提供该参数, Django 会使用 app_label + ‘_’ + module_name 作为表的名字.
若你的表的名字是一个 SQL 保留字, 或包含 Python 变量名不允许的字符–特别是连字符 –没关系.
Django 会自动在幕后替你将列名字和表名字用引号引起来. - verbose_name:给模型类起名
- verbose_name_plural:这个选项是指定,模型的复数形式是什么,若未提供该选项, Django 会使用 verbose_name + “s”
- 就是为了在后台管理admin更好地显示某些字段
- 针对str,如果像是IntegerField的内容可以如
return str(self.age)
之类的