1. 下载Django

1.1  命令行
            pip3 install django==1.11.15
            
1.2. pycharm安

  

 

2. 创建项目
2.1 命令行
            django-admin startproject 项目名
            
2.2 pycharm

    

      

3. 启动项目
3.1 命令行
            cd  项目目录下
            python manage.py runserver # 127.0.0.1:8000
            python manage.py runserver  80  #  127.0.0.1:80
            python manage.py runserver  0.0.0.0:80  #  0.0.0.0:80


3.2 pycharm
      

4. APP管理
4.1 创建APP
4.1.1 python manage.py startapp  APP名字
4.1.2 创建后对象各个文件解释:
a. admin  Django自带后台管理相关配置
b. models 写类,根据类创建数据库表
c. tests  单元测试
views  业务处理
4.2 注册APP
 4.2.1 在settings.py

INSTALLED_APPS = [
    'app01',
    'app02.apps.App02Config'
]

       

5. 路由系统(URL和函数的对应关系)
5.1 ur格式

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'index/',views.index)  # 普通匹配
    url(r'edit/(\w+)',views.edit)  # 正则匹配 
]

5.2 路由分发
如果一个项目中有多个app,就需要用到路由分发
5.2.1 将项目同名目录下的urls文件导入模块

from django.conf.urls import url,include
修改为:
url(r'^app01/', include('app01.urls'))

5.2.2 先将项目同名目录下的urls文件分别拷贝到多个app下面

修改为:
url(r'^index.html$', views.index),

5.2.3 可以选择删除多余部分
    
5.3 反向生成url    
指定url别名,获取到url

url(r'index/',views.index,name='n1') # 指定一个名字,这个名字就代表了这个url    

通过reverse反生成url        

url(r'^index/(\d+)/', views.index,name='n1'),  # index后面只有一个值的时候,views中的函数就要多传一个值,而且reverse里用args,如果是(?P<变量名>\d+)这样的话,args就要换成kwargs,并且用字典的形式表示值,比如:{'a1':1111}          
def index(request,a1):  # urls里面定义了几个参数就传几个参数
    name = reverse('n1',args=(111,))  # args=()表示要生成的url,并改名
    name = reverse('n1',kwargs={'a1':1111})  # kwargs={}表示要生成的url,并把反向生成的url改名成了a1对应的值
    print(name)

 

从上往下进行匹配
第一个参数是正则
        
6. 视图函数
6.1 request  封装了请求所有的东西
            request.path_info        ——》URL路径
            request.method           ——》请求方式
            request.POST            ——》POST提交的数据  { }
            request.GET             ——》URL上的参数   /login/?username=alex&passwor=123
        
6.2 响应
            新手必备三件套
                1. HttpResponse('home')             —— 返回一个字符串
                2. render(request,'index.html')     —— 返回一个具体的页面
                3. redirect(跳转的URL)                ——重定向  响应头 location:'跳转的地址'
                
6.3 函数的写法

def index(request): # 普通写法,可以传多个值,但最少有一个值
    函数体
    return 三件套之一

 

def index(request,args): # 如果涉及到正则的话,可以传多个值
    函数体
    return 三件套之一        

7. 静态文件的配置

        STATIC_URL = '/static/'  # 别名   /static999/
        STATICFILES_DIRS= [
            os.path.join(BASE_DIR,'static')
        ]


8. ORM
8.1 pymysql连接数据库
a.import pymysql

b.创建一个连接
c.创建一个光标
d.执行SQL语句
e.得到sql的结果
f.关闭光标
g.关闭连接
            
8.2 ORM
8.2.1 优点
     不用写SQL
8.2.3 缺点
   1. 只能完成一部分操作
   2. 效率低
8.2.4 是什么?
        对应关系
       类            表
     对象        记录
     属性        字段
8.2.5 ORM的功能:
   1. 操作数据表
   2. 操作数据行
8.2.6 使用ORM
   1. 创建一个数据库
   2. 配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 's22day18',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': '127.0.0.1',
        'PORT': 3306,
     }
}

3. 在项目同名的文件夹下的__init__.py中写代码:

import pymysql
pymysql.install_as_MySQLdb()

4. 在app下的models.py中写类:

class Publisher(models.Model):
    nid = models.AutoField(primary_key=True)
    name = models.CharField(max_length=16)

5. 执行数据库迁移的命令

python manage.py makemigrations    # 保存APP下的models.py的变更记录
pyhton manage.py migrate           # 将变更记录同步到数据库中

 9. ORM操作
            表的操作:
                创建一个员工表:

class Publisher(models.Model):
    nid = models.AutoField(primary_key=True)
    user = models.CharField(max_length=32)
    password = models.CharField(max_length=128)    

9.1 修改表字段名

1、name = models.CharField(max_length=32) 将name该为user,直接在现在类里面把name改为user
2、执行命令 python manage.py makemigrations
          Did you rename publisher.name to publisher.user (a CharField)? [y/N]  输入y
          python manage.py migrate

9.2 增加表字段

1、类中增加一行age = models.IntegerField(null=True)  null=True表示字段可以为空,还可以设置为default=10,表示默认插入值是10
2、执行命令 python manage.py makemigrations
          python manage.py migrate

9.3 外键操作
   先创建一个和员工表关联的表,

class Home(models.Model):
    dep_id = models.CharField(max_length=56)

然后

1、在员工表中插入一条:
home_id = models.ForeignKey('Home',null=True) Home表示要关联的表,并可以为空
2、执行命令 
python manage.py makemigrations python manage.py migrate

9.4 表内数据的操作:
9.4.1 查询
   获取所有数据

models.Publisher.objects.all()        —— 》 queryset  对象列表

    获取满足条件的所有数据数据

models.Publisher.objects.filter(name='xxx')  —— 》 queryset  对象列表

    排序

models.Publisher.objects.all().order_by('id')     —— 》 queryset  对象列表  升序
models.Publisher.objects.all().order_by('-id')   —— 》 queryset  对象列表  降序

    获取一个对象

models.Publisher.objects.get(nid=1)  # 获取不到或者获取多个就报错

9.4.2 增加

models.Publisher.objects.create(name='xxxxx')    —— 》成功插入的对象

 

9.4.3 删除

models.Publisher.objects.filter(nid=nid).delete()  ——》 删除满足条件的所有对象
models.Publisher.objects.get(nid=nid).delete()       ——》 删除对应的对象

9.4.4 修改

pub_obj = models.Publisher.objects.get(nid=nid)
pub_obj.name = 'xxxx'
pub_obj.save()    # 写入数据库



10. 模板语法
        {{ 变量 }}  
        {{ pub_obj.name }}
        {{ pub_obj.id }}
        
        {% for i in pub_list %}
            {{ forloop.counter }}    # 当前循环的次数
            <tr>{{ i }}</tr>
        
        {% endfor %}
       
 



posted on 2018-10-22 12:14  花豆豆  阅读(127)  评论(0编辑  收藏  举报