Django学习笔记
cd E:\wamp\www\Python\python-webapp\pro_test
http://code.ziqiangxuetang.com/django/django-models.html
bnc
bnc123456
Django 环境搭建
Django 1.8.x 支持 Python 2.7, 3.2, 3.3, 3.4 和 3.5. (长期支持版本 LTS)
Django 1.11.x 支持 Python 2.7, 3.4, 3.5 和 3.6,17年4月4号 已经发布(长期支持版本 LTS)
安装 Django
pip install Django==1.8.16 或者 pip install Django==1.11
检查是否安装成功
>>> import django >>> django.VERSION >>> django.get_version()
新建一个 django project
django-admin startproject mysite
settings.py 项目的设置文件
urls.py 总的urls配置文件
wsgi.py 部署服务器文件
__init__.py python包的目录结构必须的,与调用有关。
新建 app
python manage.py startapp app_name 或 django-admin.py startapp app_name
创建数据库表 或 更改数据库表或字段
Django 1.7.1及以上 用以下命令
# 1. 创建更改的文件
# 2. 将生成的py文件应用到数据库
python manage.py makemigrations
python manage.py migrate
使用开发服务器
python manage.py runserver
# 当提示端口被占用的时候,可以用其它端口:
python manage.py runserver 8001 python manage.py runserver 9999
(可以kill掉占用端口进程,想知道的同学可查下 lsof 命令用法)
# 监听机器所有可用 ip (电脑可能有多个内网ip或多个外网ip)
python manage.py runserver 0.0.0.0:8000
# 如果是外网或者局域网电脑上可以用其它电脑查看开发服务器
# 访问对应的 ip加端口,比如 http://172.16.20.2:8000
清空数据库
python manage.py flush
创建超级管理员
python manage.py createsuperuser
# 按照提示输入用户名和对应的密码就好了邮箱可以留空,用户名和密码必填
# 修改 用户密码可以用:
python manage.py changepassword username
导出数据 导入数据
python manage.py dumpdata appname > appname.json python manage.py loaddata appname.json
Django 项目环境终端
python manage.py shell
数据库命令行
python manage.py dbshell
更多命令:终端上输入 python manage.py 可以看到详细的列表。
*********************************************************
新建一个项目案例
*********************************************************
1 新建项目:django-admin startproject mysite
2 新建应用:python manage.py startapp learn
3 新定义的app加到settings.py中的INSTALL_APPS中
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'learn', )
4 定义视图函数
4.1 views.py打开
#coding:utf-8 from django.http import HttpResponse def index(request): return HttpResponse(u"欢迎光临 自强学堂!")
4.2 定义视图函数相关的URL,打开 mysite/mysite/urls.py 这个文件
from learn import views as learn_views # new urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$', learn_views.index), # new ]
4.3 在终端上运行 python manage.py runserver 查看访问URL
创建模板(用于存放html/css/js.eg)
在app名称下面创建templates即可
Django 模型(数据库)
1 修改models.py: class Person(models.Model): name = models.CharField(max_length=30) age = models.IntegerField() 2 创建数据表,默认的数据库 SQLite3 在manage.py输入: python manage.py makemigrations python manage.py migrate 3 提供的 QuerySet API python manage.py shell from people.models import Blog b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.') b.save() # 方法 1 Author.objects.create(name="WeizhongTu", email="tuweizhong@163.com") # 方法 2 twz = Author(name="WeizhongTu", email="tuweizhong@163.com") twz.save() # 方法 3 twz = Author() twz.name="WeizhongTu" twz.email="tuweizhong@163.com" twz.save() # 方法 4,首先尝试获取,不存在就创建,可以防止重复 Author.objects.get_or_create(name="WeizhongTu", email="tuweizhong@163.com") # 返回值(object, True/False)
*********************************************************
sqlite3数据库常用方法:
**********************************************************
1 创建项目 django-admin startproject [projectname] 2 创建App django-admin startapp [appname] 3 创建模型 class Person(models.Model): name = models.CharField(max_length=30) age = models.IntegerField() def __str__(self): return self.name class Entry(models.Model): blog = models.ForeignKey(Blog) headline = models.CharField(max_length=255) body_text = models.TextField() pub_date = models.DateField() mod_date = models.DateField() authors = models.ManyToManyField(Author) n_comments = models.IntegerField() n_pingbacks = models.IntegerField() rating = models.IntegerField() def __str__(self): return self.headline 4 创建表 python manage.py makemigrations python manage.py migrate 5 进入shell python manage.py shell 6 启动服务器 python manage.py runserver 7 表的相关操作 > from people.models import Person 获取对象: Person.objects.all() Person.objects.all()[:10] #不支持负索引,可节约内存 Person.objects.get(name="WZT") 满足条件查询 Person.objects.filter(name="abc") Person.objects.filter(name__iexact="abc") # 不区分大小写 Person.objects.filter(name__contains="abc") # 名称中包含 "abc"的人 Person.objects.filter(name__icontains="abc") #包含 "abc",且abc不区分大小写 Person.objects.filter(name__regex="^abc") # 正则表达式查询 Person.objects.filter(name__iregex="^abc") # 正则表达式不区分大小写 Person.objects.exclude(name__contains="WZ") # 排除包含 WZ 的Person对象 Person.objects.filter(name__contains="abc").exclude(age=23) # 找出名称含有abc, 但是排除年龄是23岁的 迭代查询: es = Entry.objects.all() for e in es: print(e.headline) 查询排序: Author.objects.all().order_by('name') Author.objects.all().order_by('-name') 链式查询: Author.objects.filter(name__contains="WeizhongTu").filter(email="tuweizhong@163.com") Author.objects.filter(name__contains="Wei").exclude(email="tuweizhong@163.com") # 找出名称含有abc, 但是排除年龄是23岁的 Person.objects.filter(name__contains="abc").exclude(age=23) 去重查询: qs = qs.distinct() 增加操作: ① Person.objects.create(name="WeizhongTu", age=24) ② p = Person(name="WZ", age=23) p.save() ③ p = Person() p.name="TWZ" p.age = 23 p.save() ④ Person.objects.get_or_create(name="WZT", age=23) # 速度慢,防重 删除操作: Person.objects.filter(name__contains="abc").delete() Person.objects.all().delete() 更新操作: ① Person.objects.filter(name__contains="abc").update(name='xxx') ② twz = Author.objects.get(name="WeizhongTu") twz.name="WeizhongTu" twz.email="tuweizhong@163.com" twz.save() # 最后不要忘了保存!!! 查看查询: print(Blog.objects.all().query) SELECT "blog_blog"."id", "blog_blog"."title", "blog_blog"."content" FROM "blog_blog" 获取元组: authors = Author.objects.values_list('name', 'qq') list(authors) Author.objects.values_list('name', flat=True) # 只需要 1 个字段 获取字典: list(Author.objects.values('name', 'qq')) Article.objects.filter(author__name='twz915').values('title') 别名 tags = Tag.objects.all().extra(select={'tag_name': 'name'}) 计数 from django.db.models import Count Article.objects.all().values('author_id').annotate(count=Count('author')).values('author_id', 'count') 计算一下每个作者的文章数 SELECT author_id, COUNT(author_id) AS count FROM blog_article GROUP BY author_id 获取作者的名称 及 作者的文章数 Article.objects.all().values('author__name').annotate(count=Count('author')).values('author__name', 'count') 求和 from django.db.models import Avg 求一个作者的所有文章的得分(score)平均值 Article.objects.values('author_id').annotate(avg_score=Avg('score')).values('author_id', 'avg_score') SELECT "blog_article"."author_id", AVG("blog_article"."score") AS "avg_score" FROM "blog_article" GROUP BY "blog_article"."author_id" 求一个作者所有文章的总分 from django.db.models import Sum Article.objects.values('author__name').annotate(sum_score=Sum('score')).values('author__name', 'sum_score') SELECT "blog_author"."name", SUM("blog_article"."score") AS "sum_score" FROM "blog_article"
INNER JOIN "blog_author" ON ("blog_article"."author_id" = "blog_author"."id") GROUP BY "blog_author"."name" defer 排除不需要的字段 Article.objects.all().defer('content') only 仅选择需要的字段 Author.objects.all().only('name')
******************************************************
数据库的导入导出
******************************************************
数据的导入 def main(): from blog.models import Blog f = open('oldblog.txt') BlogList = [] for line in f: title,content = line.split('****') blog = Blog(title=title,content=content) BlogList.append(blog) f.close() Blog.objects.bulk_create(BlogList) 数据的导出: python manage.py dumpdata [appname] > appname_data.json python manage.py dumpdata blog > blog_dump.json 数据导入 python manage.py loaddata blog_dump.json 导出用户数据 python manage.py dumpdata auth > auth.json # 导出用户数据 数据库设置: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), }, 'db1': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dbname1', 'USER': 'your_db_user_name', 'PASSWORD': 'yourpassword', "HOST": "localhost", }, 'db2': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dbname2', 'USER': 'your_db_user_name', 'PASSWORD': 'yourpassword', "HOST": "localhost", }, }
Python/Django 生成二维码
1 pip install qrcode pip install Image 2 import qrcode img = qrcode.make('http://www.cnblogs.com/baiboy/') with open('test.png', 'wb') as f: img.save(f)
作者:白宁超,工学硕士,现工作于四川省计算机研究院,研究方向是自然语言处理和机器学习。曾参与国家自然基金项目和四川省科技支撑计划等多个省级项目。著有《自然语言处理理论与实战》一书。 自然语言处理与机器学习技术交流群号:436303759 。
出处:http://www.cnblogs.com/baiboy/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。