python学习笔记十五 django基础

Python的WEB框架有Django、Tornado、Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。

1.创建django程序

  • 通过命令行 
    django-admin  startproject  mysite   创建project  一个工程可以包含多个app,app共用一个project的配置文件
    cd mysite
    python manage.py startapp app01      创建app01
    python manage.py startapp app02      创建app02
  • 通过pycharm
   创建Django程序

    Win:

         终端,python python manage.py startapp app01    -windows

     Mac:

        option+R   starapp app01

创建project

创建app

python manage.py startapp app01

2.django的程序目录

settings.py 全局配置文件(DATABASESTEMPLATE_DIRSSTATICFILES_DIRS等等)

urls.py 存放路由系统(映射)

wsgi.py  配置使用哪种是wsgi,用于创建socket

templates 存放模板文件

manage.py  Django的启动管理程序

创建app后,可以看见django是MTV框架,我们主要是操作models  templates views

models.py  通过orm对数据库进行操作

templates 模块存放

views.py  函数处理用户请求

3.一次简单的请求流程

1.定义url

from app01 import views #导入处理函数
urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^home/‘, views.home),
]

2.定义views

from django.shortcuts import HttpResponse
def home(request):
    #处理请求的函数必须包含request,django调用函数需要用户请求的函数封装进来
    return HttpResponse("ok") #将返回字符串封装

3.启动django程序

python manage.py runserver 127.0.0.1:8000

4.访问

4.django admin 前瞻

  django默认提供一个后台,admin用来配置后台;我们想对数据库操作,一般使用数据库终端连接,写sql语句执行操作;

但是admin可以快速的操作数据,django orm 可以通过类创建表,将类注册进admin中,后台即可对表进行操作。

创建超级用户:

python manage.py createsuperuser 
登录admin:       
http://localhost:8000/admin/

5.Django依赖数据库

migrations  django的orm 可以修改表结构

python manage.py makemirations    # 生成配置文件
    python manage.py migrate        # 根据配置文件创建数据库相关

数据库配置文件:settings.py

    DATABASES = {
    ‘default‘: {
    ‘ENGINE‘: ‘django.db.backends.sqlite3‘,
    ‘NAME‘: os.path.join(BASE_DIR, ‘db.sqlite3‘),
    }
  }

6.路由系统

  • 静态路由
     url(r‘^home/‘, views.home),
  • 动态路由

按照顺序,第n个匹配的数据,交给函数的第n个参数,严格按照顺序   

     url(r‘^news/(\d+)/‘,views.news),

     def news(request,nid):
        return HttpResponse(nid)

模版的方法,将匹配的参数,传给指定的形式参数

     url(r‘^page/(?P<n1>\d+)/(?P<n2>\d+)‘, views.page),

     def page(request,n2,n1):
        nid = n1 + n2
        return HttpResponse(nid)
  • 二级路由

  当请求过来,先进行一级匹配拿到url后边参数,将后边的参数进行二级匹配 最后找到处理函数

将前缀是app01开头的交给另一个路由处理对应一个文件

#project urlsfrom django.conf.urls import url,include
from django.contrib import admin

urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^app01/‘, include("app01.urls")),
    url(r‘^app02/‘, include("app02.urls")),
]
#app01 创建urlsfrom app01 import views

urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^home/‘, views.home),
]
#app01 viewsfrom django.shortcuts import HttpResponse
def home(request):
    return HttpResponse("app01.home")

7.数据库操作

ORM框架

  code first

       写类 --> 数据库表  

     db first

     通过命令创建数据库,表,字段 -->根据表创建类 
注册app

INSTALLED_APPS = [
    ‘django.contrib.admin‘,
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
    ‘app01‘
]
1.配置models.py 创建类 

    class UserInfo(models.Model):#集成基类
        username = models.CharField(max_length=64)
        pwd = models.CharField(max_length=64)

2.先生成一个配置文件

     python manage.py makemigrations

3.通过文件进行数据库操作

     python manage.py migrate

默认表名:appname_classname

基本操作:

#views中导入modelsfrom app01 import models
def db_handle(request):
    # 增加
    # models.UserInfo.objects.create(username=‘alex‘, password=‘123‘, age=73)
    # dic = {"username": ‘eric‘, "password": ‘123‘, "age": 73}
    # models.UserInfo.objects.create(**dic)
    # 删除
    # models.UserInfo.objects.filter(username=‘alex‘).delete()
    # 修改
    # models.UserInfo.objects.all().update(age=18)
    # 查找
    # models.UserInfo.objects.all() 查找所有
    # models.UserInfo.objects.filter(age=18) 匹配条件
    # models.UserInfo.objects.filter(age=18).first() 匹配中选择第一个
    #user_list_obj 数据库表的对象,一个对象代表数据库的一行数据,它包含该表的几个字段    user_list_obj = models.UserInfo.objects.all()     # queryset,list
    #for line in user_list_obj:
    #   print(line.username,line.age)
    #return HttpResponse(‘ok‘)

实例:

数据库添加与展示

urls配置

from app01 import views
urlpatterns = [
    url(r‘^home/‘, views.home),
    url(r‘^db_handle/‘, views.db_handle),
]

views配置

from app01 import models def db_handle(request):
    # request 用户请求的所有内容
    # request.POST  用户以POST提交
    # request.GET  用户以GET提交
 if request.method == "POST":
    # request.POST.get("username") 获取后台数据
    # request.POST[‘uername‘]   获取后台数据
    # request.POST[‘password‘]
    # request.POST[‘age‘] = int(request.POST[‘age‘])
    # d = dict(request.POST)
    # models.UserInfo.objects.create(**d)    #创建数据
    models.UserInfo.objects.create(username=request.POST[‘username‘],
                                       password=request.POST[‘password‘],
                                       age=request.POST[‘age‘])    #展示数据
    user_list_obj = models.UserInfo.objects.all()
    return render(request, ‘t1.html‘, {‘li‘: user_list_obj})

模板配置

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <form action="/app01/db_handle/" method="post">
        <p><input type="text" name="username" /></p>
        <p><input type="text" name="password" /></p>
        <p><input type="text" name="age" /></p>
        <p><input type="submit" value="提交"/></p>
    </form>

    <table border="1">
        <thead>
            <tr>
                <th>用户名</th>
                <th>密码</th>
                <th>年龄</th>
            </tr>
        </thead>
        <tbody>
            {% for item in li %}
                <tr>
                    <td>{{ item.username }}</td>
                    <td edit="true">{{ item.password }}</td>
                    <td>{{ item.age }}</td>
                </tr>
            {% endfor %}
        </tbody>
    </table>
    <script src="/static/jquery-2.1.4.min.js"></script>
</body>
</html>

静态文件渲染html

1.创建templates同级目录static

2.在settings定义static位置

STATICFILES_DIRS = (
        os.path.join(BASE_DIR, ‘static‘),
    )
注意:
POST提交数据需要以下操作
MIDDLEWARE_CLASSES = [
    ‘django.middleware.security.SecurityMiddleware‘,
    ‘django.contrib.sessions.middleware.SessionMiddleware‘,
    ‘django.middleware.common.CommonMiddleware‘,
    # ‘django.middleware.csrf.CsrfViewMiddleware‘,   注释
    ‘django.contrib.auth.middleware.AuthenticationMiddleware‘,
    ‘django.contrib.auth.middleware.SessionAuthenticationMiddleware‘,
    ‘django.contrib.messages.middleware.MessageMiddleware‘,
    ‘django.middleware.clickjacking.XFrameOptionsMiddleware‘,
]
 
时间: 2024-08-02 02:48:31

python学习笔记十五 django基础的相关文章

python学习笔记十六 django深入学习一

django 请求流程图 django 路由系统 在django中我们可以通过定义urls,让不同的url路由到不同的处理函数 from . import views urlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), #精确匹配 url(r'^articles/([0-9]{4})/$', views.year_archive), #动态路由 url(r'^articles/([0-9]{4})/([0-9]{2

python学习笔记十五 web框架

python Web程序 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. Python的WEB框架分为两类: 自己写socket,自己处理请求 基于wsgi(Web Server Gateway Interface WEB服务网关接口,实现socket功能),自己处理请求 如图示: 自己写的web框架 #!/usr/bin/env python #coding:utf-8 import socket def handle_req

python 学习笔记十九 django项目bbs论坛

跨站请求伪造保护 CSRF 中间件和模板标签提供对跨站请求伪造简单易用的防护.某些恶意网站上包含链接.表单按钮或者JavaScript ,它们会利用登录过的用户在浏览器中的认证信息试图在你的网站上完成某些操作,这就是跨站攻击.还有另外一种相关的攻击叫做“登录CSRF”,攻击站点触发用户浏览器用其它人的认证信息登录到其它站点. 全局: 中间件 django.middleware.csrf.CsrfViewMiddleware 局部: @csrf_protect,为当前函数强制设置防跨站请求伪造功能

python学习笔记(十五) - python连接mysql数据库

一. 安装mysql驱动: 由于mysql服务器以独立的进程运行,并通过网络对外服务,所以,需要支持python的mysql驱动来连接mysql服务器. 安装驱动:easy_install mysql-connector-python 二. 连接数据库: 下面演示使用python代码连接mysql: #!/usr/bin/env python # -*- coding: utf-8 -*- # utility @ Python # 导入MySQL驱动: import mysql.connecto

Python学习笔记十五_开发接口

1.mock接口,模拟一些接口,在别的接口没有开发好的时候,你需要用它 假的支付接口,模拟支付成功 2. 3.查看数据,避免直接操作数据库flask web开发框架 实例化server 装饰器,下面的函数变为一个接口 启动服务 import flask,json #__name__代表当前这个python文件 server = flask.Flask(__name__)#实例化server,把当前这个python文件,当做一个服务 def my_db(sql): import pymysql c

python 学习笔记十二 CSS基础(进阶篇)

1.CSS 简介 CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常存储在样式表中 把样式添加到 HTML 4.0 中,是为了解决内容与表现分离的问题 外部样式表可以极大提高工作效率 外部样式表通常存储在 CSS 文件中 多个样式定义可层叠为一 css存在方式: 元素内联 页面嵌入 外部引入 语法:style = 'key1:value1;key2:value2;' 1.元素内联(在标签中使用css) <!--在标签使用--> &

python学习笔记十五:日期时间处理笔记

#-*- coding: utf-8 -*- import datetime #给定日期向后N天的日期 def dateadd_day(days): d1 = datetime.datetime.now() d3 = d1 + datetime.timedelta(days) return d3 #昨天 def getYesterday(): today = datetime.date.today() oneday = datetime.timedelta(days=1) yesterday =

python学习笔记(十五)-异常处理

money = input('输入多少钱:') months = input('还几个月:') try: res = calc(int(money),int(months)) except ZeroDivisionError as e: #try里面的代码如果出错了,走except里面的代码 traceback.print_exc()#只是输出报错的详细信息而已 print('还款的月数不能小于1',e) #months输入0时 except ValueError as e: print('输入

python学习笔记十——异常处理

1.try: command except 错误类型,记录错误信息变量: command finally: command try...finally的用处是无论是否发生异常都要确保资源释放代码的执行.一般来说,如果没有发生错误,执行过try语句块之后执行finally语句块,完成整个流程.如果try语句块发生了异常,抛出了这个异常,此时就马上进入finally语句块进行资源释放处理.如下从几个细节讨论finally的特性. 1).try中的return: 当在try语句块中含有return语句