第二:Djangoのカスタムログイン機能

カスタムログイン機能

静的フォルダ(静的フォルダ)を作成します。

views.pyビュー機能が作成され、あなたはいくつかのスタイルのCSSやJSのオブジェクトを使用する必要があります、またはCDNは、ネットワーク呼び出しが危険になるだろうから、経由の道を加速するために、ときにサーバーのネットワーク障害、スタイルのCSSやJSのオブジェクトの負荷につながることができる場合それは出てこないので、私たちは、ローカルストレージにこれらの静的ファイルが必要です。

静的ファイル

CSSファイル、JSファイル、画像、フォント、だけでなく、いくつかのサードパーティ製のフレームワーク(ブートストラップ、sweetalert、fontawesome)

静的フォルダ(静的)

デカップリング、容易な保守管理。

あなたは非常に厄介に見えることはできませんので、これらの静的ファイルに対応して、我々は管理を統一することができ、我々は一般的に名前を付けるだろう、特別なフォルダを作成する必要がありstatic、次のように構成され、

static
    - css      网站用到的所有css文件
    - js       网站用到的所有js文件
    - image    网站用到的所有图片文件
 
    第三方文件

静的構成ファイルジャンゴ

基本構成

settings.pyの中で変更します。

STATIC_URL = '/static/'  # 访问后端静态资源的接口前缀  默认情况下接口前缀名与静态文件名保持一致
        """
        <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css">
        你要想访问后端的静态资源 你必须以接口前缀开头 后面跟上具体的文件路径 才能够访问到对应的资源
 
        当你的接口前缀正确之后  会拿着后面的路径依次去下面列表中的每一个文件夹下查找对应的资源
        顺序是从上往下依次查找 如果都没有找到才会报错
        """
STATICFILES_DIRS = [
            os.path.join(BASE_DIR,'static'),  # 这里的static才是你文件夹的路径
            os.path.join(BASE_DIR,'static1'),
            os.path.join(BASE_DIR,'static2'),
        ]
# 当static和static1中都有一个a.txt,当在static中查找到之后,就不会再去static1中查找了。

STATIC_URL:静的リソースへのアクセス、バックエンドインターフェースのプレフィックス、一貫性のある静的なデフォルトのファイル名とインターフェースの接頭辞

それはあなたがアクセス静的なウェブリソースにしたいとき、1がここに書かなければならない、トークンのような役割を果たし'/static/'HREFパス(リンクで認識すると、<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap. min. css">SRCパス(中)またはスクリプトを<script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>)静的で始まり、DjangoはあなたをできるようになりますSTATICFILES_DIRSリストそのフォルダ内に存在するすべてのファイルは、必要なリソースを見つけます。

パス接頭辞はXXX、またXXXを変更する必要があるプレフィックスインターフェイスに変更する場合。

したがって、ここでの静的静的の先頭に対応するパスです。

静的リソースの動的結合

前述のインタフェース静的リソースは、変更すると、経路プレフィックスJS導入CSSのHTMLを変更する必要がある場合に高いHTML、これは、非常に面倒になり、したがって結合動的に作成、修正するために多くの時間を必要とします方法:

{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
<script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>
 

静的リソースインターフェースの変更、CSSとJSパスが変更されたとき。

設定ファイルを変更するには、ポスト要求

ポストの要求を提出するときは、ラインアウトの設定ファイルのコメントに移動する必要があります。

# 中间件
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

フォームフォームレビュー

デフォルトでは、背のURLに提出されたデータと、データを提出する申請フォームのフォームを取得することです?xxx=yyy&zzz=ttt既存のフォーム。

http://127.0.0.1:8000/login/?username=admin&password=123

モード取得要求request.method()

区別するための他の一般的な方法を要求する要求を使用して、より多くのリクエストが対応する論理GET要求にin vivoで再書き込み機能を直接取得することができる機能処理ビュー:コードのレベルを低下させます。

def login(request):
    if request.method == 'POST':
           username = request.POST.get('username')
        password = request.POST.get('password')
        return httpresponse('收到了')
return render(request,'login. html')

リクエストオブジェクトのメソッド

request.method:取得要求、リターンGET / POST

request.POST:データPOSTリクエストに沿って取得することは、大きな辞書のリターンを運びます。<QueryDict: {'username': ['admin'], 'password': ['123']}>

  • request.Post.get('key'):リストの最後の要素だけを取ります

  • request.POST.getlist('key'):リスト全体を削除します

request.GET:データが要求(データ形式を運ぶ取得に沿って取得しますurl?xxx=xxx&ooo=lll

  • request.GET.get('key') :リストの最後の要素だけを取ります
  • request.GET.getlist('key') :リスト全体を削除します

djangoMySQL接続★

1.プロファイル(settings.py)関連のパラメータの設定

# 修改数据库的配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 数据库类别
        'NAME': 'day49',  # 库的名字
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': '123',
        'CHARSET': 'utf8'
    }
}

プロジェクト名やアプリケーション名、次の2. __init__ファイル、代替pymysqlのMySQLdb接続のMySQLの使用を指定

import pymysql
 
pymysql.install_as_MySQLdb()

DjangoのORMのプロフィール

ジャンゴORMライブラリを作成していない、あなただけのテーブルを作成することができます

# orm对象关系映射:
类   ------> 表
对象  ------> 记录
属性  ------> 字段值

ORMのpythonは、私たちは簡単かつ迅速に操作データにオブジェクト指向構文(ドット文字)を使用することができます

アプリケーションの下models.pyに対応するクラスモデル(モデルテーブル)に行く最初の必要性を書きます

# 示例:
class User(models.Model):
    # int类型 primary key主键 auto_increment自增长
    id = models.AutoField(primary_key=True)
    # varchar(32)类型的字段,限制展示长度为32
    name = models.CharField(max_length=32)
    # int类型的字段
    password = models.IntegerField()
    # 其实创建的还是varchar类型
    email = models.EmailField(default='[email protected]')
    # hobby字段可以为空
    hobby = models.CharField(null=True,max_length=32)

データベース移行コマンドを実行する必要後:

*************************数据库迁移(同步)命令************************
python3 manage.py makemigrations  # 仅仅是将你对数据库的改动记录到某个小本本上(migrations文件夹)
python3 manage.py migrate  # 将改动真正的同步到数据库中
 
***********只要你动了models.py跟数据库相关的代码 你就必须要重新执行上面的两条命令来保证数据库与models.py一致***********

削除の変更の検索フィールド

フィールドにより、

ダイレクトモデルテーブルmodels.pyファイルに新しいフィールドが、あなたはデータベース移行コマンドを実行することができます

  • フィールドはデフォルト値に設定されています
    • models.EmailField(デフォルト= '123456 @ COM')
  • このフィールドは空にすることができます実行します
    • models.EmailField(ヌル=真)

検索フィールド

....

変更フィールド

コードmodels.pyファイルを変更したら、データベース移行コマンドを実行することができます

削除フィールド

長い対応するフィールドアウトコメントのように、その後、データベース移行コマンドを実行するすべてのデータフィールドと対応する情報(注意)を削除します

削除のデータを変更して再検索

検索

1、単一のクエリデータ

from app01 import models   # 先导入models模型表
models.类名.objects.filter(字段名='字段值')
res = models.User.objects.filter(username='jason')  # select * from user where username='jason'
# 返回的结果是一个列表  支持索引取值但是不支持负数并且不推荐使用 推荐你使用它给你封装好的方法
user_obj = res.first()  # 取上面返回的列表中的第一个值
# filter方法条件不存在的时候 不会报错返回的是一个空列表
 
"""
filter括号内直接放多个关键字参数 并且多个关键字参数之间是and关系
res = models.User.objects.filter(username='jason',password='123')
# 类似执行select * from user where username='jason' and password='123';
"""

2、データクエリのすべて

  • フィルタは、()は、すべての括弧を取るように書かれていません
  • すべて()すべてのデータを照会します

クエリデータは、データ・ディクショナリの類似したセットのリストを返します。

<QuerySet [<User: jason>, <User: egon>, <User: sean>, <User: admin>, <User: 你不行>]>

増加

1、()を作成

user_obj = models.User.objects.create(**kwargs)
 
user_obj = models.User.objects.create(name=username,password=password)
print(user_obj,user_obj.name)
 
# 该方法有返回值,返回值就是当前被创建的对象本身

図2に示すように、結合法オブジェクト

# 先生成一个User对象
user_obj = models.User(name=username, password=password)
 
# 调用对象的绑定方法
user_obj.save()

[削除]

models.User.objects.filter(id=delete_id).delete()
 
# 将filter过滤出来的数据全部删除,类似批量删除

変更

図1に示すように、モード1(推奨)

models.User.objects.filter(id=edit_id).update(name=username, password=password)

(知っている、お勧めできません)2。第2の方法

バインディング・オブジェクトを割り当てるための方法およびオブジェクトによって

# 先获取数据对象
edit_obj = models.User.objects.filter(id=edit_id).first()
 
# 再修改对象属性
edit_obj.name = username
edit_obj.password = password
 
# 调用对象的绑定方法保存
edit_obj.save()
 
# 该方法会将所有的字段的数据重新修改,并不是针对某个字段进行修改,不推荐。

おすすめ

転載: www.cnblogs.com/cnhyk/p/12168159.html