Django框架

Django框架

Flask与Django的区别

Flask中:
request请求的取值:
GET:     request.args.get(key)
POST:    request.form.get(key)
COOKIES: request.cookies.get(key)
FILES:   request.files.get(key)
response响应的值:
author='Echo'
return render_template('xxx.html',author=author)
views
在views包中路由和视图函数是一体的,路由作为一个装饰器来装饰视图函数
蓝图:
    bp = Blueprint('user',__name__,url_prefix='/user') #定义蓝图  #url_prefix:路径的前缀
    @user_bp.route('/')  #使用蓝图对象定义路由,相当于app.route('/')
    def index():
        return
重定向:
      return redirect(url_for('blueprintname.视图函数名'))        
template模板中
在template模板中:
{
  
  {url_for('index',a=1,b=2)}}
Django中
request请求的取值:
GET:     request.GET.get(key)
POST:    request.POST.get(key)
COOKIES: request.COOKIES.get(key)
FILES:   request.FILES.get(key)
response响应的值:
1.HttpResponse('响应内容')

2.render(request,'模板xxx.html',{'username':username})
路由urls.py
在django中路由和视图函数是分开的,路由在urls中,视图函数在views中
1.主路由中定义:
     urlpatterns = [
       path('user/',include('user.urls',namespace='user'))#http://127.0.0.1:8000/user/login/
       path('news',include('news.urls',namespace='news'))
     ]
--------------------------------------------------------------
2.在应用中添加urls.py
app_name = 'user'  ------>如果没有app_name,会报错
urlpatterns = [
  path('',index,name='index')
  path('login/',login,name='login')
]
视图函数views.py
def index():
        return
重定向:redirect(reverse('namespace#主路由名字:name#子路由名字'))
模板template中
模板中:
{%url'namespace:name'%}

1.简介

Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。

Django是一个开放源代码的Web应用框架,由Python写成。

2.构建虚拟环境

打开电脑黑屏终端,输入命令:mkvirtualenv django1901,构建django的虚拟环境。

在配置好虚拟环境之后,创建一个django项目。

在pycharm的控制台Terminal上,安装: pip install django==2.0

​ pip install mysqlcline

3.项目结构的搭建

创建一个django项目
项目
  |---项目同名文件夹
        |----settings.py   -----> 配置文件 1. 第一步   database  语言 时区
        | ---urls.py    -----> 主路由文件
        | ---wsgi.py
        | -- __init__.py
  | ---user
        |--migrations文件夹
        |-- __init__.py
        |--views.py
        |--models.py
        |--tests.py
        |--apps.py
        |--admin.py
        |--urls.py  ----->自己添加

  | ---templates   ----> 模板文件夹
  | ---manage.py
第一步
创建一个django项目之后,会有一个与项目同名的文件夹,在这个文件夹里面有:
   settings.py ------->配置文件
   urls.py     ------->主路由文件
   wsgi.py
   __init__.py
--------------------------------------------------------------
修改settings.py文件中DATABASES的默认值为:
                   """
                   DATABASES = {
                    'default': {
                        'ENGINE': 'django.db.backends.mysql',
                        'NAME': 'XXX',
                        'USER':'XXX',
                        'PASSWORD':'XXX',
                        'HOST':'39.106.150.87',
                        'PORT':3306
                    }
                }
                   """
--------------------------------------------------------------
修改settings.py文件中语言模式和时区模式为:
                   """
                   LANGUAGE_CODE = 'zh-hans'

                   TIME_ZONE = 'Asia/Shanghai'

                   USE_I18N = True

                   USE_L10N = True

                   USE_TZ = False
                   """
--------------------------------------------------------------
当使用静态文件时需要在settings.py中配置:
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),]
--------------------------------------------------------------
在使用pip install startapp 应用名 在项目中添加应用时,需要在配置文件settings.py中的NSTALLED_APPS 列表中手动添加上自己创建的应用名。
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',  # 启动session功能
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'user.apps.UserConfig',
    'articles',
-----------------------------------------------------------
 
第二步
安装应用:
python manage.py startapp 应用名

4.路由

flask框架中:
@app.route('/')
def index():
    pass
--------------------------------------------------
django框架中:
urls.py  ------>专门设置路由
#导入视图函数
from user.views import login
urlpatterns = [
  path('login/',login),--->注意:flask中必须添加前导'/',而在django中无需添加。
  path('路由路径',视图函数名)
]

5.视图函数

views.py-------> 视图函数

def index(request)----->参数request在定义函数的时候必须传递
    #参数request此时就是一个对象
    request.path---->
    request.method-->
    return HttpResponse('hello world')
------------------------------------------------------------
注:render() ------->同flask中的render_template()

6.request的取值:

​ flask Django

GET: request.args.get(key) request. GET.get(key)

POST: request.form.get(key) request.post.get(key)

COOKIES: request.cookies.get(key) request.COOKIES.get(key)

FILES: request.files.get(key) request.FILES.get(key)

相同:

request.method

request.path

7.response对象

1.HttpResponse(‘响应内容’)

2.render(request,‘模板xxx.html’)

8.主子路由

步骤:
1.主路由中定义:
     urlpatterns = [
       path('user/',include('user.urls',namespace='user'))#http://127.0.0.1:8000/user/login/
       path('news',include('news.urls',namespace='news'))
     ]
--------------------------------------------------------------
2.在应用中添加urls.py
app_name = 'user'  ------>如果没有app_name,会报错
urlpatterns = [
  path('',index,name='index')
  path('login/',login,name='login')
]
--------------------------------------------------------------
3.使用

9.反向解析

反向解析:给一个函数名,自动的找到路径

反向解析目的:
1.超级链接,form action=''
2.重定向
---------------------------------------------------------------
              flask                             
模板:  {
   
   {
   
   url_for('login',a=1,b=2)}} 
重定向:redirect(url_for('blueprintname.视图函数名'))
---------------------------------------------------------------
              django
模板:  {
   
   %url'namespace:name'%}
代码:  reverse('namespace:name')
重定向:redirect(reverse('namespace:name'))

10.csrf中间件

在这里插入图片描述

在表单提交的时候需要加上{%csrf_token%}才能通过csrf中间件验证

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
<form action="{% url 'user:login' %}" method="post">
    {% csrf_token %}
    <p><input type="text" name="username" placeholder="输入用户名"></p>
    <p><input type="password" name="password" placeholder="输入密码"></p>
    <p><input type="submit" value="登录"></p>
</form>
</body>
</html>

11template模板

在views视图函数中:

from django.shortcuts import render


# Create your views here.

def index(request):
    data = {
   
   
        'username': 'echo',
        'age': 20,
        'height': '183cm',
        'articles': ['美女是如何修炼成的?', '焊工五级和程序员双重技能修炼术', '葵花宝典', '一阳指', '六脉神剑'],
        'desc': '<h1>我是Echo</h1>'
    }
    return render(request, 'article/index.html', context=data)
#   return render_template('article/index.html',username='',age=20,height='',articles=[])

在template模板中:

{% extends 'base.html' %}
{% block title %}
    文章首页
{% endblock %}

{% block content %}
    {% autoescape off %}
        {
  
  { username }}  --- {
  
  { age }}  -- {
  
  { height }} --- {
  
  { gender | default:'男' }}--{
  
  { desc }}
    {% endautoescape %}
    文章内容: {
  
  { articles | last }} ---- {
  
  { 3.895312 | floatformat:2 }} --- {
  
  { articles.2 }}


    {# 遍历#}
    {% for article in articles %}
        <div>{
  
  { article }}</div>
    {% empty %}
        <div>暂无数据</div>

    {% endfor %}

    {% if age == 20 %}
        年龄等于20岁
    {% endif %}

    {% ifequal age 20 %}
        年龄等于20岁------------22222
    {% endifequal %}

    <br>

    <button id="btn">点我试试</button>

{% endblock %}

{% block myjs %}
    <script>
        button = document.getElementById('btn')
        button.onclick = function () {
     
     
            alert('笑到你。。。。')
        }
    </script>
{% endblock %}
模板与flask使用的对比

Tag:

​ flask Django

autoescape:{%autorscape Flase/True%}{%endautoescape%} | {%autorscape on/off%}{%endautoescape%}


for: {%for…%}…{%else%}…{%endfor%} | {%for…%}…{%empty%}…{%endfor%}


​ {% loop.index 索引%} | {% forloop.counter%}


csrf: 在flask-wtf中 CSRFProtect(app) | 中间件中默认开启了保护,{% csrf_token %}


if: {% if 条件 %} …{%else%}… {%endif%} | {% if 条件 %} …{%else%}… {%endif%}

​ 不可以使用{%ifequal %} | {% ifequal age 20 %}…{% endifequal %}


url: 无此标签 { { url_for(‘blueprintname.endpoint’,key=value,key=value)}} | {% url ‘namespace:name’ arg1 arg2 %}

模板渲染:

Flask:
      return render_template('xxx.html',key=value,key=value,....)

     使用: 模板中{
   
   {
   
   key}}   ---->获取value值
 Django:
     return render(request,'xxx.html',context={
   
   key:value,key:value,...})

     使用: 模板中: {
   
   {
   
   key}}   ---->获取value值

12静态文件的使用

1.在settings文件中
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),]

2.在模板xxx.html页面应用静态文件:
   {%load staticfiles %}

3.在模板template中加载静态:
   <img src='{%static 'images/a1.jpg'%}' />
   <link ref='styleshoots' src='{%static 'css/mycss'%}'>
   <script ref='styleshoots' src='{%static 'js/myjs'%}'>

13.model 模型

"""
1. 定义model,自定义一个类继承models.Model

2. 添加类属性

3. 迁移 同步:
   python manage.py makemigrations  ----> 迁移   产生一个0001.initial.py
   python manage.py migrate         ----> 同步   构成数据库的映射

  注意:如果不明确声明表名: 自动生成的表名就是: appName_model名字

"""
-----------------------------------------------------------
class User(models.Model):  # 模型类
    username = models.CharField(max_length=12, unique=True)
    password = models.CharField(max_length=256)

    add_time = models.DateTimeField(default=datetime.now)
    isdelte = models.BooleanField(default=False)

    def __str__(self):
        return self.username

    class Meta:
        db_table = 'user'    
添加
添加:
  方式1:
      user = User()
    # user.username = 'lily'
    # user.password = '123456'
    # user.age = 18
    # user.gender = 'girl'
    # user.save()
  方式2# User.objects.create(username='lucy',password='13kjhfjd',age=20,gender='girl')
删除
删除:  
flask  :  db.session.delete(user对象)   db.session.commit()

Django:
单个对象的删除
user = User.objects.filter(username='lily').first()
user.delete()
多个对象 的删除:
User.objects.filter(age__gt=18).delete()
更新
更新:
  批量更新:
  User.objects.filter(isdelte=False).update(aa='123',age=22)

  单个用户:
    user = User.objects.get(pk=6)
    user.age = 18
    user.save()
查询
查询:

Flask:
     User.query.all()                               
     User.query.filter(User.uname==zhi)          
     User.query.get(id)    
------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值