django入门
创建django项目
命令行方式: django-admin startproject 项目名称
pycharm方式: file 👉 new project 👉 django 👉 项目路径,选解释器
启动django项目
命令行方式:
- python manage.py runserver 80 自定义端口号 : 127.0.0.1:80
- python manage.py runserver 0.0.0.0:80 自定义IP地址和端口号 : 0.0.0.0:80
pycharm方式:django图标下 👉 绿色三角开始运行
简单使用
html页面放在templates文件夹下
templates:settings里的TEMPLATES里的DIRS(pycharm方式的项目自动创建,终端方式的项目手动写路径)
from django.shortcuts import HttpResponse, render def index(request): return HttpResponse('欢迎进入红浪漫!') # 返回字符串 def home(request): return render(request, 'home.html') # 返回html页面 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/', index), # 路径和函数的对应关系 url(r'^home/', home), ]
HttpResponse 👉 返回字符串
render 👉 返回渲染过的html页面
redirect 👉 重定向到指定url
静态文件的配置
静态文件
static files 不经常发生变化的配置文件(css,JavaScript,images等)
静态文件路径
在settings中的STATIC_URL = '/static/'的下方
STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static') ]
BASE_DIR : settings文件已经拼接好的路径
static : 自定义的文件夹名
可以向列表中添加多个文件夹来存放多个不同类型的文件,此时文件的查找顺序是按列表顺序查找
然后在static文件夹中创建css/imgs/js/plugins等文件夹,在不同文件夹内分别放置对应静态文件
在导入静态文件时,要以自定义文件夹名开头,例:
<link rel="stylesheet" href="/static/css/login.css">
app的介绍和使用
urls文件是存放对应关系的,业务函数与urlpatterns写在同一页面过于拥挤也不符合逻辑,所以把业务函数按照功能分类
创建app
通过pythpycharm中的terminal窗口快捷进入cmd窗口
python解释器 manage.py startapp app名字
app的目录
admin.py django提供的工具,相当于管理后台
apps.py app的信息
models.py 模型,与数据库相关
views.py 存放业务函数
app的注册
settings中的INSTALLED_APPS列表中
- 方式一:直接添加app名字
- 方式二:app名字.apps.首字母大写的app名字Config(推荐)
创建项目时就创建app
创建django项目时 more settings 里输入要创建的app的名字
app的使用
把业务函数放进app下的views.py
在urls页面 from app名字 import views
在urlpatterns列表中通过 views.函数名 添加对应关系
如果使用了多个app,可以通过 from app名字 import views as ... 来使用app
Django使用数据库的流程
- 创建一个MySQL数据库
- 在settings中对数据库进行配置
ENGINE : mysql NAME: 数据库名 USER: 用户名 PASSWORD: 密码 HOST : 127.0.0.1 PORT:端口
- 告诉django使用pymysql连接数据库
写在与settings同级目录下的`__init__.py`中: import pymysql pymysql.install_as_MySQLdb()
- 在app下的models中写类
class Publisher(models.Model): pid = models.AutoField(primary_key=True) name = models.CharField(max_length=32) class Book(models.Model): name = models.CharField(max_length=32) pub = models.ForeignKey('Publisher', on_delete=models.CASCADE) 外键关联Publisher,级联删除 class Author(models.Model): name = models.CharField(max_length=32) books = models.ManyToManyField('Book') 与Book表多对多关联
- 执行数据库迁移的命令
terminal窗口中 python manage.py makemigrations # 记录下所有App下的models的变更记录 python manage.py migrate # 同步迁移的记录
ORM的介绍和使用
ORM
对象关系映射,用面向对象的内容与关系型数据库做映射关系,可以通过操作对象/类的方法操作数据库
优势
通过对数据库的映射,使对数据库操作数据不用直接编写SQL代码,让开发人员专注于业务逻辑的处理,提高开发效率
劣势
牺牲程序的执行效率,ORM的操作是有限的
ORM的使用
查询
from app01 import models models.Publisher.objects.get(name='xxx') # 获取一个满足条件的对象 找不到或者是多个就报错 models.Publisher.objects.filter(name='xxx') # 获取满足条件的所有的对象 queryset 对象列表 models.Publisher.objects.all() # 获取所有的数据 pub_obj.name # 出版社的名字 pub_obj.pk pub_obj.pid # 出版社的主键 book_obj.pk book_obj.name book_obj.pub # 所关联的出版社对象 book_obj.pub_id # 所关联的出版社对象id author_obj.books # 关系管理对象 author_obj.books.all() # 所关联的所有的书籍对象
新增
pub_obj =models.Publisher.objects.create(name='xxxx') pub_obj = models.Publisher(name='xxxx') pub_obj.save() models.Book.objects.create(name='xxxx',pub=pub_obj) models.Book.objects.create(name='xxxx',pub_id=pub_obj.pk) author_obj = models.Author.objects.create(name='xxxx') author_obj.books.set([1,2]) # 设置多对多的关系
删除
models.Publisher.objects.filter(pk=pk).delete()
pub_obj.delete()
编辑
pub_obj.name='qqqq' pub_obj.save() book_obj.name='xxxx' book_obj.pub=pub_obj book_obj.pub_id=pub_obj.pk book_obj.save() author_obj.name ='xxx' author_obj.save() author_obj.books.set([id,id]) # 设置
request
当一个页面被请求时,Django就会创建一个包含本次请求原信息(请求报文中的请求行、首部信息、内容主体等)的HttpRequest对象
Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象