1.新建项目
django-admin startproject demo
2.新建APP
cd demo
django-admin startapp blog
3.运行于服务中
python3 manage.py runserver 127.0.0.1:8000
4.数据库同步
python manage.py syncdb
注意:Django 1.7.1及以上的版本需要用以下命令
python manage.py makemigrations
python manage.py migrate
5.创建超级管理员
python manage.py createsuperuser
# 按照提示输入用户名和对应的密码就好了邮箱可以留空,用户名和密码必填
# 修改 用户密码可以用:
python manage.py changepassword username
6.定义视图函数相关的URL(网址)
Django 1.8.x及以上,Django 官方鼓励(或说要求)先引入,再使用:
from django.conf.urls import url
from django.contrib import admin
from learn import views as learn_views # new
urlpatterns = [
url(r'^$', learn_views.index), # new
url(r'^admin/', admin.site.urls),
url(r'^hello/$',hello)
7.Models模型
class User(models.Model):
id = models.AutoField(primary_key=True)
username = models.CharField(max_length=20)
password = models.CharField(max_length=20)
#可不加,若不加则默认会为名字 appname_user,加了这个名字则是 user
class Meta:
db_table = 'user'
模型的类型
blank=True是否为空值
你可能想自定义一个标签。 你只需在模块中指定 verbose_name 。
举个例子,说明如何将 Author.email 的标签改为e-mail,中间有个横线
email = models.EmailField(blank=True, verbose_name=’e‐mail’ )
- AutoField (primary_key=True)
- BooleanField
- CharField / InAddressField / FilePathField / EmailField / URLField (max_length=888)
- DateTimeField / TimeField / DateField
- FloatField
- IntegerField / BigIntegerField / SmallIntegerField
- TextField
外键
“`
manytomany 多对多关系
onetoone 一对一关系
依从读者表,将读者的主键设置为关系表的外键
reader = models.ForeignKey(Reader, on_delete=models.CASCADE)
数据库生成reader_id
依从于新闻表,将新闻的主键设置为关系表的外键
news = models.ForeignKey(NewsModel, on_delete=models.CASCADE)
#### Unicode对象
unicode() 方法可以进行任何处理来返回对一个对象的字符串表示。
def unicode(self):
return u’%s %s’ % (self.username, self.password)
### 8.数据库的增删改查
#### 添加
user=User(username=’name’,password=’ss’)
user.save()
#### 删除
p = Publisher.objects.get(id=1)
p.delete()
#### 修改
user.username=’liu’
user.save()
#### 获得单个对象
user=User.objects.get(id=1)
user.username
#### 查询过滤
userList = User.objects.filter(username=’liu’)
查询到的是一个序列对象
#### 排序
单个排序
userList = User.objects.all().order_by(“username”)
多个排序
userList = User.objects.all().order_by(“id”,”username”)
逆排序(在名字前面加一个减号)
userList = User.objects.all().order_by(“-username”)
限制查询的个数
userList = User.objects.all().order_by(“id”)[0]
userList = User.objects.all().order_by(“id”)[0:2]
不支持负索引,但可变通
userList = User.objects.all().order_by(“-id”)[0]
### 9.Django站点管理,(Admin)
python3 manage.py syncdb 。这一步将生成管理界面使用的额外数据库表
当你把 ‘django.contrib.auth’ 加进 INSTALLED_APPS 后,
第一次运行 syncdb 命令时, 系统会请你创建一个超级用户。
如果你不这么作,你需要运行 python manage.py createsuperuser
来另外创建一个admin的用户帐号,否则你将不能登入admin
#### 1.自定义管理员界面列表,list_display是用于列表显示,search_fields是用于过滤搜索
日期过滤 List_filter或者date_hierarchy
from django.contrib import admin
from mysite.books.models import Publisher, Author, Book
class AuthorAdmin(admin.ModelAdmin):
list_display = (‘first_name’, ‘last_name’, ‘email’)
search_fields = (‘first_name’, ‘last_name’)
List_filter=(‘time’,)
admin.site.register(Publisher)
admin.site.register(Author, AuthorAdmin)
admin.site.register(Book)
#### 2.排序
ordering = ('time',)
逆序是在前面加上一个减号‘-’
### 10.表单提交
#### post提交
Setting.xml里面需要注释掉如果你在settings里边没有注释掉
'django.middleware.csrf.CsrfViewMiddleware',
username = request.POST[‘username’]
### 11.模板视图
#### 循环
{% for user in users %}
- {{ user.username }}
- {% endfor %}
#### if/else
{% if is_logged_in %}
Thanks for logging in!
{% else %}
Please log in.
{% endif %}#### include视图
{% include “user/index.html” %}
“`12.部署Django
1.关闭debug模式