python-django_简介与用法_注册登录展示案例

django 简介与用法

1. 登录功能案例

连接到mysql

1. urls.py 路由

    url(r'^login', views2.login),
    url(r'^index', views2.index),

2. views.py 视图函数

def index(request):
    return render(request,'index.html')

def login(request):
    if request.method == 'GET':
        return render(request,'login.html')
    else:
        name = request.POST.get('name')
        password = request.POST.get('password')
        # 创建一个数据库链接
        conn = pymysql.connect(host='127.0.0.1',user='root',password='123',database='userinfo',port=3306)
        # 拿到一个游标
        cursor = conn.cursor()
        # 执行sql
        cursor.execute('select * from user where name=%s and password=%s',(name,password))
        # 获取结果
        ret = cursor.fetchone()
        print(ret)
        if ret:
            return redirect('/index')
        else:
            return HttpResponse('用户名或者密码错误')

3. login.html 模板文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css">
    <title>Title</title>
</head>
<body>
<div class="row">
    <div class="col-md-6 col-md-offset-3">
        <h1 class="text-center">登录功能</h1>
        <form action="" method="post">
            <div class="form-group">
                <label for="">用户名:</label>
                <input type="text" name="name" class="form-control">
            </div>
            <div class="form-group">
                <label for="">密码:</label>
                <input type="password" name="password" class="form-control">
            </div>
            <div class="text-center">
                <input type="submit" value="登录" class="btn btn-success">
            </div>
        </form>
    </div>
</div>
</body>
</html>

4. index2.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css">
    <script src="/static/js/jquery.min.js"></script>
    <title>首页</title>
</head>
<body>
    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">导航</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="#">Project name</a>
        </div>
        <div id="navbar" class="navbar-collapse collapse">
          <form class="navbar-form navbar-right">
            <div class="form-group">
              <input type="text" placeholder="Email" class="form-control">
            </div>
            <div class="form-group">
              <input type="password" placeholder="Password" class="form-control">
            </div>
            <button type="submit" class="btn btn-success">Sign in</button>
          </form>
        </div><!--/.navbar-collapse -->
      </div>
    </nav>
    <!-- Main jumbotron for a primary marketing message or call to action -->
    <div class="jumbotron">
      <div class="container">
        <h1>刘清政</h1>
        <p>同城交友</p>
        <p><a class="btn btn-primary btn-lg" href="#" role="button">疯狂点击我</a></p>
      </div>
    </div>
    <div class="container">
      <!-- Example row of columns -->
      <div class="row">
        <div class="col-md-4">
          <h2>Heading</h2>
          <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
          <p><a class="btn btn-default" href="#" role="button">View details »</a></p>
        </div>
        <div class="col-md-4">
          <h2>Heading</h2>
          <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
          <p><a class="btn btn-default" href="#" role="button">View details »</a></p>
       </div>
        <div class="col-md-4">
          <h2>Heading</h2>
          <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
          <p><a class="btn btn-default" href="#" role="button">View details »</a></p>
        </div>
      </div>
      <hr>
      <footer>
        <p>© 2016 Company, Inc.</p>
      </footer>
    </div> <!-- /container -->
</body>
</html>

2. MTV 与 MVC 模型

1. MVC

MVC架构
	主流的web框架都是MVC架构
    
web应用分为
	模型(M) 视图(V) 控制器(C)
    M: model 数据库相关操作
    V: view  视图 模板文件
    C: controller 控制器 逻辑相关 逻辑代码

Web服务器开发领域里著名的MVC模式
	三层之间以一种插件式的、松耦合的方式连接在一起
    模型负责业务对象与数据库的映射(ORM)
    视图负责与用户的交互(页面)
    控制器接受用户的输入调用模型和视图完成用户的请求
    
其示意图如下所示:        

在这里插入图片描述

2. MTV

MTV架构
    M 模型(Model): 负责业务对象和数据库的关系映射(ORM)
    T 模板 (Template):负责如何把页面展示给用户(html) (就是mvc的v层)
    V 视图(View): 负责业务逻辑,并在适当时候调用Model和Template (路由+V=MVC的控制器)
    除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示:

在这里插入图片描述

	一般是用户通过浏览器向我们的服务器发起一个请求(request),这个请求会去访问视图函数
	(如果不涉及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户)
	视图函数调用模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中,最后返回网页给用户

3. django 请求生命周期

1 python中的web服务器都符合wsgi协议

2 web服务器,任何语言都会有一个web服务器,负责把http请求转成这门语言的变量
	-python:wsgiref(性能很低),uwsgi(C语言写的),200多并发量
    -java:  tomcat,jboss(300多并发)
    -php:   php服务器
    
3 补充
	近几年python中的web框架:sanic fastapi (异步框架)

在这里插入图片描述

4. ORM 概述

1. ORM 简介

查询数据层次图解:如果操作mysql,ORM是在pymysql之上又进行了一层封装

在这里插入图片描述

MVC或者MTV框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦
即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动

ORM是“对象-关系-映射”的简称
1 orm:对象关系映射(跟语言无关)
    	数据库中的表     ----》对应程序的一个类
        数据库中的一行数据----》对应程序中的一个对象
        
2 python中常见orm框架
	-django orm框架
    -sqlachemy orm框架
    
3 java:(扩展),java中写web项目
	ssh框架:spring+struts(有漏洞)+hibernate(orm框架)
	ssm框架:spring+springmvc+mybatis(orm框架,可以写原生sql)
    springboot: sb框架 ,tomcat内置进去了
    springcloud:微服务
    
4 orm的作用
	-创建表(不能创建数据库,需手动创建数据库)
    -增加删除表内字段(增删查改数据)
    
5 补充: 虚拟环境作用 
    隔离项目,每个项目都有自己依赖的模块和包,不同模块和包的版本就不会相互影响

2. django ORM的使用

sqlite
	是一个文件数据库,一个库就是一个文件,不需要单独安装
	pycharm中用到关系型数据库,不想装mysql,就可以使用sqlite
    移动开发本地存储数据,存在sqlite中

1 创建个UserInfo表,在models中写一个类
2 表中有字段(类属性),字段有属性

# 第一步在models中写一个类
	class UserInfo(models.Model):
        # 字段属性 => 后面那个对象决定的
        # 改字段自增,并且是主键
        id = models.AutoField(primary_key=True)
        # 改字段是varchar类型,长度为32(唯一约束,是否是索引,默认值是,是否可以为空)
        name = models.CharField(max_length=32)
        # 密码字段
        password =models.CharField(max_length=64)
        
# 第二步,把表创建出来(执行两个命令)
	python3 manage.py makemigrations # 这条命令会在migrations创建一条记录,数据库变更记录
    python3 manage.py migrate        # 把更改同步到数据库

在这里插入图片描述

# sql中的表                                                      

  # 创建表:
     CREATE TABLE employee(                                     
                id INT PRIMARY KEY auto_increment ,                    
                name VARCHAR (20),                                      
                gender BIT default 1,                                  
                birthday DATA ,                                         
                department VARCHAR (20),                                
                salary DECIMAL (8,2) unsigned,                          
              );

# sql中的表纪录                                                  
  # 添加一条表纪录:                                                          
      INSERT employee (name,gender,birthday,salary,department)            
             VALUES   ("alex",1,"1985-12-12",8000,"保洁部");               

  # 查询一条表纪录:                                                           
      SELECT * FROM employee WHERE age=24;                               

  # 更新一条表纪录:                                                           
      UPDATE employee SET birthday="1989-10-24" WHERE id=1;              

  # 删除一条表纪录:                                                          
      DELETE FROM employee WHERE name="alex"                             

# python的类
class Employee(models.Model):
     id=models.AutoField(primary_key=True)
     name=models.CharField(max_length=32)
     gender=models.BooleanField()
     birthday=models.DateField()
     department=models.CharField(max_length=32)
     salary=models.DecimalField(max_digits=8,decimal_places=2)

# python的类对象
   # 添加一条表纪录:
      emp=Employee(name="alex",gender=True,birthday="1985-12-12",epartment="保洁部")
      emp.save()
   # 查询一条表纪录:
      Employee.objects.filter(age=24)
   # 更新一条表纪录:
      Employee.objects.filter(id=1).update(birthday="1989-10-24")
   # 删除一条表纪录:
      Employee.objects.filter(name="alex").delete()

5. 用户注册登录展示小案例


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I believe I can fly~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值