Drangoフレーム2
静的ファイル
1.静的ファイルとは何ですか
Webサイトには、すでに書かれたファイルを前進させるために使用さ
CSS
JS
サードパーティのコンポーネント:ブートストラップ
sweetalert
fontawesome
ウェブサイトの使用は、統一されたテンプレートにHTMLファイルフォルダ
サイトは静的フォルダに静的ファイルを使用するには、フォルダを手動で独自のものを作成したいです
次のように内部構造は次のとおりです。
静的
-css
Webサイトで使用されるすべてのCSSファイル
-js
サイトで使用するすべてのJSファイル
-image
サイトで使用されているすべての画像ファイル
サードパーティのファイル
バックエンドがすでに良い、関連するリソースを設定したため、ユーザーがリソースを取得するには、ブラウザウィンドウでURLを入力することができる理由
2.django静的な設定ファイル
Djangoは、構成情報は、構成ファイルにさらされるあなたのための設定ファイルで、あなただけの固定文言を記述する必要は、リソースに対応する静的ファイルにさらすことができます
基本的配置
STATIC_URL = '/static/' # 这是访问后端静态资源的接口前缀,默认情况下接口前缀名u静态文件名保持一致
<link rel="stylesheet" href="/xxx/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')
]
動的結合の問題を解決する方法
{% 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.nin.js' %}"</script>
フォームフォーム
デフォルトでは、データを提出する申請フォームのフォームを取得することです
http://127.0.0.1:8000/login/?username=admin&password=123
アクション
1. Doが現在のアドレスに向けて提出され、デフォルトのデータを書き込みません
2.フルパス
3.接尾辞(/インデックス)
あなたはポストの要求を提出するときは、ラインアウトの設定ファイルのコメントに行く必要があります
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',
]
ビュー機能は、異なる論理決定のためのさまざまな要求をするために行われる必要があります
例えば:
要求はhtmlファイルを返す必要がありますする必要があります
ポスト要求は、データを取得するために、ユーザーが提出した後、さらに処理を行うべきです
以上を踏まえ、あなたはまず、現在のリクエストがリクエストであるかを判断しなければなりません
二つのオブジェクト.request
取得要求モードの1前端
request.method # 结果是一个纯大写的字符串 GET/POST
request.POST # 获取的是post请求所提交的数据 类似于一个大的字典
# <QueryDict: {'username': ['admin', 'jason'], 'password': ['123']}>
request.POST.get() # 只会获取列表最后的一个元素
request.POST.getlist() # 取出整个的列表
異なっ一般的に異なった要求のために処理しなければならないが、一般GETでリクエストの数は、ポストの要求の数よりもはるかに大きい、我々は非論理的な判断GETを要求する必要がありますので、我々は、要求は直接機能で書かれます身体を判断してはいけません
ケース
最初:
def login(request):
if request.method == 'GET':
# get逻辑
return render(request, 'login.html')
elif request.method == 'POST':
# psot逻辑
print(request.method, type(request.methd))
# GET <class 'str'> POST <class 'str'>
# 获取到数据之后
return HttpResponse('马上处理')
コードのレベルを減らすために:
より一般的に要求を処理機能に取得し、GETリクエストのロジックに対応する関数の本体に直接書き込むことが可能である他の区別がrequest.methodを使用して作られている要求
if request.method == 'POST':
return HttpResponse('收到了')
return render(request 'login.html')
2.pycharm接続mysqlの
わずかに
3.django接続mysqlの
あなたは、まず事前にライブラリを、対応する良いを作成する必要があります
1.まず、設定ファイルの設定に関連するパラメータにアクセスしてください
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库类别
'NAME': 'day49', # 库的名字
'HOST':'127.0.0.1',
'PORT':3306,
'USER':'root',
'password':'123',
'CHARSET':'utf8'
}
}
2. initは使用してDjangoのプロジェクトファイル名またはアプリケーションの名前を教えて__ __次pymysql代わりに、デフォルトのMySQLdbのデータベースに接続します
# 需在__ init __下面加上两行代码告知django框架
import pymysql
pymysql.install_as_MYSQLdb()
の3 .django ORMについて
1.ormのご紹介
ジャンゴORMは、私たちは手動で私たち自身を作成するためのライブラリの必要性を作成するのに役立ちません。
オブジェクトリレーショナルマッピングのORMを想起
クラステーブル
オブジェクトレコード
属性フィールド値
役割:データベース操作が簡単かつ迅速にデータを操作する人ができPythonのオブジェクト指向構文ドット演算子を作ることができなくなります
対応するアプリケーションモデルクラスを記述するために、ファイルに行くModels.py最初の必要性
models.py
class User(models.Model):
# 相当于 id int primary key auto_increment 这句可以不写,不写默认用id作为主键且自增,写了就用写的
id = models.AutoField(primary_key=True)
# 相当于 name varchar(32) max_length必须要给值
name = models.CharField(max_length=32)
# 相当于 password varchar(32)
password = models.CharField(max_length=32)
2.有料特に注意します:
データベース移行(同期)コマンド
データベースはmodels.pyと一致していることを確実にするために、これらの2つのコマンドを再実行するために長いデータベースに関連付けられている移動models.pyコードなどとして、それが必要です
# 两行指令
# 将你对数据库的改动记录到migrations文件夹中
python3 manage.py makemigrations
# 将改动真正的同步到数据库中
python3 manage.py migrate
3.フィールドCRUD
フィールドにより、
レコードがすでにテーブルに存在する場合:
1.いずれかのフィールドのデフォルト値を設定します
2.フィールドを空にすることができます許可のどちらか
検索フィールド
目に見えます
変更フィールド
コードモデルを変更した後、データベースの移行コマンドを実行します
削除フィールド
コメントは、データベース移行コマンドの実行、およびすべてに対応するデータフィールド情報の対応するフィールド限り削除されます
4.削除は、検索データベースを変更します
1.チェック:
フィルタ()
結果のフィルタ)がサポートされているインデックス値のリストを返すが、負の値をサポートしていない、および(1次回推奨インデックス値を使用することは推奨されません
フィルタ法条件が存在しない場合、文句ない、空のリストを返します
ブラケットは、フィルタ複数のキーワード引数に直接配置することができ、複数のキーワードとパラメータの間の関係であります
res = models.User.objects.filter(username='jason',password='123') # 相当于select * from user where username='jason' and password='123';
全てを見ます
filte()カッコ内に書き込みないパラメータはないが、すべて取ることです
すべて()すべてのデータを照会するために使用されます
登录功能
def login(request):
# 要给用户返回一个登录的页面
# 获取前端请求的方式
if request.method == 'POST':
username = request.POST.get('username') # 获取用户输入的用户名
password = request.POST.get('password') # 获取用户输入的密码
# 查看数据库
res = models.User.objects.filter(name=username) # 这里的res可以看成是一个列表套数据对象的形式
# print(res) # <QuerySet [<User: User object>]>
# user_obj = res[0] # QuerySet支持索引取值但是不支持负数 并且也不推荐你直接索引取值
if res:
user_obj = res.first() # 推荐
if user_obj.password == password:
return HttpResponse('登录成功!')
else:
return HttpResponse('密码错误!')
# filter方法条件不存在时, 不会报错,会返回一个空的列表
# 还需要注意的是filter括号内可以直接放多个关键字参数 并且多个关键字参数之间的关系是and的关系
return HttpResponse('该用户不存在!')
# 若是get请求返回页面
return render(request, 'login.html')
2.増加します:
作成()
方式一 (推荐)
models.User.objects.create(name=username, password=password)
バインドされたメソッドのオブジェクト
方式二 (不推荐)
先生成一个User对象,再调用对象的绑定方法
user_obj = User(name=username, password=password)
user_obj.save()
# 模拟注册
# 注册功能
def register(request):
# 获取前端请求的方式
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# 向数据库中添加数据
models.User.objects.create(name=username, password=password)
return HttpResponse('注册成功!')
# 要给用户一个注册的页面
return render(request, 'register.html')
3.削除:
上のクリックしたユーザーは、あなたが削除されたバックエンドに行くべき
削除したいデータのバックエンド・ユーザーIDを取得するには?
4.変更:
ユーザーIDを変更したいデータを取得する方法は?
IDは、フロントページを表示するためにユーザに提供するデータを取得し、データを表示します
# 要实现删除与编辑功能需要三个方法
# 删除功能
def delete_user(request):
# 获取要删除的数据的id
delete_id = request.POST.get('delete_id')
# 直接根据id删除数据
models.User.objects.filter(id=delete_id).delete()
# 重定向到展示页
return redirect(request, '/main')
# 编辑功能
def edit_user(request):
# 获取用户要修改的数据的id值
edit_id = request.POST.get('edit_id')
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# 修改方式
models.User.objects.filter(id=edit_id).update(name=username, password=password)
# 再次跳转到数据展示页面
return redirect(request, '/main')
# 根据id获取数据对象 并且展示到html页面上
edit_obj = models.User.objects.filter(id=edit_id).first()
return render(request, 'editor.html', {'edit_obj': edit_obj})