1つは、Python仮想マシンを作成してDjangoをインストールする
同じパッケージの異なるバージョンの依存関係の問題を解決するには、Python仮想マシンを使用します。仮想マシンにパッケージをインストールしても、実際の環境のパッケージには影響しません。
仮想マシンは、実際には物理マシン上のPython環境を複製します。
仮想環境作成コマンド:
mkvirtualenv <虚拟环境名>
python3仮想環境の作成など:
mkvirtualenv -p python3 bj11_py3
動作する仮想環境を入力してください:
workon <虚拟环境名>
マシン上にある仮想環境の数を確認します。
workon 空格 + 两个tab键
仮想環境を終了します。
deactivate
仮想環境を削除します。
rmvirtualenv <虚拟环境名>
仮想環境にパッケージをインストールするコマンド:
pip install 包名
注: sudo pip installパッケージ名は使用できません。このコマンドは、仮想環境ではなく実際のホスト環境にパッケージをインストールします。
仮想環境にインストールされているpythonパッケージを確認します。
pip list
pip freeze
django環境をインストールします。
pip install django==1.8.2
djangoプロジェクトをビルドする手順は次のとおりです。
1. djangoプロジェクトを作成する
2.アプリケーションを作成する
3.アプリケーションを作成したら、アプリケーションを登録する必要があります。つまり、setting.pyに対応するコードを追加します
INSTALLED_APPSの最後にアプリ名の行を追加します。
4. python manage.py runserverを実行します
2、Djangoプロジェクトの構造
DjangoはMVTアーキテクチャに従います
M:モデルとデータベースの相互作用
V:ビューはリクエストを受け入れて処理します
T:テンプレートはHTMLページを生成します
djangoプロジェクトを作成する
ファイル説明
__init__.py:これがPythonパッケージであることを示します
settings.py:プロジェクト構成ファイル
url.py:URLルーティング
wsgi.py:wsgiプロトコル、Webサーバーとdjangoの相互作用のエントリポイント
manage.py:プロジェクト全体を管理するためのプロジェクト管理ファイル
アプリケーションを作成する
ファイル説明
admin.py:アプリケーションとプロジェクト間の接続を確立するには、アプリケーションを登録する必要があります。ウェブサイト管理関連文書
models.py:データベースとの相互作用モジュール
views.py:処理関数、ビュー関数を定義し、応答を返す
tests.py:テストコードを書くためのファイル
データベース構成
3、モデルを作成する
1.アプリケーションのmodles.pyにモデルクラスを記述し、models.Modelクラスを継承します
class Book(models.Model):
name = models.CharField(max_length=20) #定义字符串格式,设置最大值
data = models.DateField #定义时间格式
number = models.IntegerField #定义整数格式
データベースで使用するテーブルを指定します。モデルクラスのMetaクラスをオーバーライドできます。このクラスは、テーブル名を指定するために使用されます。
class Meta:
db_table = '表名'
2.モデルクラスを作成した後、コマンドを実行して移行ファイルを生成します
python manage.py makemigrations
実行が成功すると、アプリパッケージの下に追加の移行パッケージがあります
3.移行を実行してテーブルを生成します
python manege.py migrate
4. adim.pyでテーブル管理者を設定します
admin.site.register(User_Info)
または
admin.site.register(User_Info,UserAdmin) 第二个参数表示由哪个用户管理,默认admin
4.モデルクラス(モデル)を介してデータテーブルとモデルデータベースの関係を操作する
モデルクラスを使用してデータテーブルをCRUDする
1.モデルモジュールをアプリのモデルにインポートします
from django.db import models
2.モジュールクラスでインスタンスを作成する
b = Book()
3.インスタンスの属性に値を割り当てます
b.name = "a book"
b.number = 23
4.インスタンスの保存属性を呼び出し、コンテンツをデータベースに書き込みます
b.save()
5.クエリ
モジュールクラスのオブジェクトクラスのgetメソッドは、修飾されたインスタンスをクエリして、インスタンスを返すことができます。
b2 = Book.objects.get(id=1)
type(b2)
戻り値:AppTest.models.Book
次のようなb2のプロパティを表示できます。
h1.book.name
返回: a book
プロパティを変更した後、save関数を呼び出してデータベースを更新します
6.削除
b.delete()
モデル関係
1.複数のカテゴリを作成する場合、外部キーを複数のカテゴリに追加します。外部キーの値は、次のような1つのカテゴリのクラス名(テーブル名)です。
class Hero():
name = models.CharField(max_length=20)
age = models.IntegerField()
#添加外键(django 2.0以上,需要加上on_delete,否则会报错)
book = models.ForeignKey("Book", on_delete=models.CASCADE)
2.インスタンスを作成する
マルチクラス作成インスタンスは基本的に1クラスに似ており、注意すべき点は次のとおりです。
Duo Tiongの外部キーのパラメーターはオブジェクトです。つまり、クラスのインスタンスです。
3.関連するテーブルプロパティを表示する
マルチクラス:マルチクラスインスタンスを作成した後、インスタンスの外部キー属性はオブジェクトであり、これは1つのクラスのインスタンスです。したがって、そのオブジェクトを使用して、インスタンスのクラスのプロパティを取得できます。
1つのカテゴリ:1つのカテゴリ内のすべての関連する複数のカテゴリを表示するには、instance.multi-class name_set.all()またはmultiple-class name_set.get()を使用します。
注:クラス名はデフォルトで小文字です
5、バックグラウンド管理(モデル)
1.ローカリゼーション(言語、時間)
プロジェクトの下のsetting.pyファイルを変更します
2.管理者を作成する
コマンド:
python manage.py createsuperuser
作成が成功したら、IP:PORT / adminでバックグラウンド管理インターフェースに入ります。
3.モデルクラスを登録する
アプリケーションの下のadmin.pyにモデルクラスを登録します。
登録されたモデルクラスに従って、対応するテーブル管理ページを生成するようにdjangフレームワークに指示します。
4.管理インターフェースをカスタマイズする
管理インターフェースのデフォルトの表示:
名前にカスタムコンテンツを表示させる必要がある場合は、モデルクラスの__str__関数を書き換えます。関数が返す結果はここに表示されます。といった:
5.管理インターフェースをカスタマイズする
admin.pyでカスタム管理モデルクラスを記述する必要があります。クラス名は次のようにカスタマイズできます
class BookAdmin(admin.ModelAdmin):
list_display=['name','number']
注:list_displayに書き込まれるフィールドは、インターフェースに表示されるフィールドです。
admin.pyにモデルクラスを登録するときは、次のようにパラメーターで管理モデルクラスを指定します。
admin.site.register(Book, BookAdmin)
注:括弧内の最初のパラメーターはモデルクラスで、2番目のパラメーターは管理モデルクラスです。
6.構成とリダイレクトを表示する
1アプリケーションでurls.pyを設定します
アプリケーションの下のurls.pyを、プロジェクトの下のurls.pyのurlpatternsのリストに追加します
导包:from django.conf.urls import include,url
语法:path('', include("AppTest.urls")), 或
url(r'^', include("AppTest.urls")),
パスには2つのパラメーターがあり、最初のパラメーターは、adminなど、アクセスされたときにIPの後に続く最初の文字です。2番目のパラメーターは、include関数を使用するアプリケーションの下のurls.pyです。
2.アプリケーションの下でurls.pyを構成します
次のように、アプリケーションのurls.pyのurlpatternsリストにルートを記述します。
语法:url(r'^index', views.index)
urlには2つのパラメーターがあり、最初のパラメーターはブラウザーがアクセスしたページで、2番目のパラメーターはview.pyの関数です。
3.ブラウザ要求を返すビュー関数を定義します
アプリのviews.pyにビュー関数を追加します。パラメーターはHttpRequestです。HttpResponse()を返す必要がある
from django.http import HttpResponse
def index(request):
return HttpResponse(.......)
注:ページジャンプ、ページにアクセスして別のページのコンテンツを返したい場合は、戻るときに次のように記述します。
return HttpResponseRedirect('/index')
ブラウザーに再度/ indexを訪問させる手段。
7、テンプレート(html)
1.テンプレートファイルディレクトリを設定する
プロジェクトのsetting.pyのTEMPLATESの「DIRS」リストにテンプレートパス(ページファイルストレージパス)を追加します
setting.pyには、デフォルトでこの変数があります。
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
つまり、プロジェクトの絶対パスです。この変数によって相対パスをスプライスできるため、プロジェクトを移動した後でもテンプレートファイルを見つけることができます。
したがって、 'DIRS'には次のように記述できます。
'DIRS': [os.path.join(BASE_DIR, 'templates')]
注:通常、アプリケーションと同じ名前の新しいフォルダーがテンプレートの下に作成され、対応するアプリケーションテンプレートがこのフォルダーに格納されて、アプリケーションテンプレートを分離します。
2.テンプレートファイルを使用する
ビュー関数(ビューの下の関数)でテンプレートファイルを使用する
a)テンプレートコンテンツを取得する
temp = loader.get_template('python/index.html')
b)コンテキストを定義する
#context = RequestContext(request,{})
context = {替换字典}
c)テンプレートをレンダリングする
res_html = temp.render(context)
d)ブラウザに戻る
return HttpResponse(res_html)
しかし、djangoには独自のレンダリング関数があるため、次のように直接記述できます。
return render(request, "python/index.html", {"key":"value"})
パラメータのディクショナリでページのコンテンツを置き換えることができます。2つの中括弧を使用して変数{ {}} を囲みます。 キーは変数名に対応し、値はページを変更する変数値です。といった:
return render(request, "python/index.html", {"context":"让我们来试一试"})
ページでforループを使用するには、次のように{%%}を使用します。
{% for i in list %}
<li>{
{i}}<li>
{% endfor %}
注:rangeはリストではなくジェネレーターであるため、rangeを直接使用することはできません。Listを次のようなビューのリストに置き換える必要があります。
return render(request, "python/index.html", {"list":list(range(10))})
データベースから情報を読み取り、表示します。
1.views.py
a)テンプレートから情報を取得する
book_list = Book.objects.all()
b)ページのコンテンツを置き換える
return render(request,"book/index.html", {"book_list":book_list})
2.ページトラバーサル
{% for book in book_list %}
{
{book}}
</br>
{% endfor %}
8つの静的ファイル構成
1.プロジェクトに静的フォルダーを作成します
2. setting.pyを変更します
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR + "static")]
html上:
もともと書かれた
{# <link rel="stylesheet" href="/static/css/reset.css"/>#}
パス書き込みを使用しないでください。設定を変更して静的書き込みを構成すると便利です。
頭の前:
{% load staticfiles %}
頭:
<link rel="stylesheet" href="{% static "css/reset.css" %}"/>
<link rel="stylesheet" href="{% static "css/navigation.css" %}"/>
<link rel="stylesheet" href="{% static "css/register.css" %}"/>
9つのテンプレート言語とフィルター
テンプレート言語
1.テンプレート変数
テンプレート変数名は、数字、文字、アンダースコア、ドットで構成されており、アンダースコアで始めることはできません。
テンプレート変数を使用:{ {テンプレート変数名}}
テンプレート変数の解析順序:
例:{ {book.btitle}}
- 最初に本を辞書、btitleをキー名として扱い、値book ['btitle']を取ります
- bookをオブジェクト、btitleを属性として、値book.btitleを取ります
- bookをオブジェクト、btitleをオブジェクトメソッドとして、値book.btitleを取得します。
例:{ {book.0}}
- 最初に本を辞書として扱い、キー名として0を使用し、値book [0]を取ります
- bookをリストとして、0を添え字として、値book [0]を取ります
解析が失敗した場合、コンテンツの生成時にテンプレート変数が空の文字列で埋められます。
テンプレート変数を使用する場合の前。辞書、オブジェクト、またはリストの場合があります。
2テンプレートラベル
{% 代码段 %}
for循环:
{% for x in 列表 %}
{
{循环内容}}
# 列表不为空时执行
{% empty %}
# 列表为空时执行
{% endfor %}
forループがトラバースされた回数は、{ {forloop.counter}} で取得できます 。
{% if 条件 %}
{% elif 条件 %}
{% else %}
{% endif %}
テンプレートでは、次のような論理演算がサポートされています。
関係比較演算子:> <> = <= ==!=
注:比較演算を実行するときは、比較演算子の両側にスペースが必要です。
論理演算:notおよびor
3.テンプレートのコメント
1行コメント:{ # note content #}
複数行コメント:
{% comment %}
注释内容
{% endcomment %}
フィルタ
1.フィルターの使用
フィルターは、テンプレート変数を操作するために使用されます。
日付:日付の表示形式を変更します。
長さ:長さを見つけます。文字列、リスト。
default:テンプレート変数のデフォルト値を設定します。
フォーマット:
模板变量|过滤器:参数
といった:
{
{book.date|date:'Y年-m月-d日'}}
2.カスタムフィルター
- appの下にtemplatetagsという名前の新しいpythonパッケージを作成します。
- templatetagsパッケージに新しいpyファイルを作成します。ファイル名は固定されていません。例:filters.py
- ガイドパッケージ
from django.template import Library
4. Libraryオブジェクトを作成する
register = Library()
5.フィルター関数を作成して装飾する
#定义函数,进行装饰,装饰后即成为过滤器
@register.filter
def mod(num):
'''判断参数是否为偶数'''
return num%2 == 0
カスタムフィルター関数には、少なくとも1つのパラメーターと最大2つのパラメーターがあります。フィルターを使用する場合、デフォルトでは「|」の前のものがパラメーターとしてフィルターに渡されます。
パラメーターが2つある場合、デフォルトでは|の前のものが最初のパラメーターとして使用され、フィルターの後に:を追加し、その後に2番目のパラメーターを書き込みます。といった:
{
{book.date|date:'Y年-m月-d日'}}
テンプレートの継承
複数のページに同じコンテンツがある場合、テンプレートの継承を使用して同じ部分を親テンプレートに書き込むことができ、子テンプレートは親テンプレートを継承することによって親テンプレートのコンテンツを取得します。
子テンプレートが親テンプレートを継承する場合は、
{% extends '父模板路径' %}
親テンプレートパスは、相対テンプレートパスです。継承する場合、新しいサブテンプレートの作成時にデフォルトで含まれるコードを削除する必要があります。また、サブテンプレートに直接コードを記述することは無効です。
子テンプレートでコードを記述する必要がある場合は、親テンプレートでブロックを予約する必要があります。次に、サブテンプレートは予約済みブロックを書き換えます。
次のタグを使用して、親テンプレートでブロックを定義できます。
{% block 块名 %}
中间内容(块中间可以写内容,也可以不写)
{% endblock 块名%}
子テンプレートは親テンプレートを継承した後、親テンプレートのブロックのコンテンツを書き換えることができます。
継承フォーマット:
{% extends 父模板文件路径%}
{% block 块名 %}
{
{ block.super}} #获取父模板中块的默认内容
書き換えられたコンテンツ
{% endblock 块名%}
テンプレートエスケープ
views.pyで、render関数を使用してテンプレートのコンテンツを置き換える場合、<h1> <h1>などのタグを使用すると、渡された文字列はタグになりません。したがって、htmlエスケープをオフにする必要があります。
といった:
テンプレートコンテキスト内のHTMLタグは、デフォルトでエスケープされます。
小于号< 转换为<
大于号> 转换为>
单引号' 转换为'
双引号" 转换为 "
与符号& 转换为 &
閉鎖方法:
1.フィルターを使用する
{
{ 模板变量|safe}}
2.フィルタースイッチ
{% autoescape off %}
模板语言代码
{% endautoescape %}