django入门

创建django项目

命令行方式: django-admin startproject 项目名称

pycharm方式: file 👉 new project 👉 django 👉 项目路径,选解释器

启动django项目

命令行方式: 

  • python manage.py runserver    默认IP地址和端口号 : 127.0.0.1:8000
  • 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使用数据库的流程

  1. 创建一个MySQL数据库
  2. 在settings中对数据库进行配置
    ENGINE :  mysql
    NAME:  数据库名
    USER: 用户名
    PASSWORD: 密码
    HOST : 127.0.0.1
    PORT:端口 

     

  3. 告诉django使用pymysql连接数据库
    写在与settings同级目录下的`__init__.py`中:
    import  pymysql
    pymysql.install_as_MySQLdb()

     

  4. 在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表多对多关联

     

  5. 执行数据库迁移的命令
    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 参数承接这个对象

 

posted @ 2019-08-21 21:30  亚里士多缺德  阅读(131)  评论(0编辑  收藏  举报