ジャンゴ再度行くために、全体的なプロセス
ログイン機能を、例えば
静的構成ファイルが
データ送信するためのフォームを取得する方法をバックエンドを形成する
リクエストメソッド
pycharmデータベース接続mysqlデータベースはジャンゴを使用して
DjangoのORMプロフィール
CRUDテーブルのフィールド
CRUDテーブルデータ
静的構成ファイル
1.準備作成
プロジェクトを作成し、アプリに登録APP、設定を作成し、設定ファイルを登録するためのテンプレートやフォルダを作成します
INSTALLED_APPS = [ ' django.contrib.admin ' 、 ' django.contrib.auth ' 、 ' django.contrib.contenttypes ' 、 ' django.contrib.sessions ' 、 ' django.contrib.messages ' 、 ' django.contrib.staticfiles ' 、 #'app01' #简写 ' app02.apps.App02Config ' #全称 ]
アプリのコンセプト
ジャンゴは、実際のWebアプリケーションフレームワーク開発するために設計された
空のDjangoプロジェクトを大学に似て
アプリ内のさまざまな大学に似て
、あなたの選択科目システムなど(学生、教師、管理者)
で例えば、あなたYoukuのプロジェクト(一般的なユーザー、VIPユーザー、管理者)
方言:異なる機能モジュールのためにあなたがプログラムを実施デカップリング処理するために別のアプリを開くことができ
、より良い開発グループを達成
2.ルートを作成します。
3.ビュー機能を作成します。
4.テンプレートファイルを書きます
ファイルは、通常のHTMLテンプレートは下のフォルダに格納されているウェブサイトで使用されている
静的なリソースは、通常は静的フォルダにウェブサイトを使用しています
プロジェクト開始:
ユーザーはURL(******)内のすべてのリソースにアクセスすることができます
、リソース(URL)へのアクセスを提供するバックエンドインターフェースのでブラウザは、対応するリソースにアクセスするためのURLを入力することができた
Djangoはインターフェイスは、ルーティングとビュー機能との間のurls.py対応しているインターフェイスを開くことができます?
ユーザーへの静止露光がないため、バックエンドのリソースは、一般的に、手動でユーザーに公開するかどうかを指定する必要があり、ブラウザがリソースにアクセスすることはできません、
それは我々はURLがスタティックルーティング設定されたフォルダにファイル内になければならないことを理にかなっている
が、私たちに、より良いジャンゴを与えます道、あなただけがそれを設定ファイルに静的なパスを設定する必要があります
5.設定静的ルート(******)
前項のために私たちはこれらのファイルが呼ばれると呼ばれることができ引き継ぐためにそれを使用して文書に書き込まれた「静的ファイル」 1.静的ファイルをすることができ 、ブートストラップフレームはクラスのために書かれている前の 画像 CSS JS 2.静的ファイルを下の静的なデフォルトフォルダ上のすべて のフォルダに作成静的デフォルトフォルダデフォルトのサブフォルダにより、 現在のサイトのすべてのスタイルファイルのCSSのフォルダ 現在のサイトのJSファイルのjsファイルにすべての すべての画像ファイル現在のサイト内のimgファイルを 他の(フロントエンドフレームワークコードにサードパーティ製のプラグインのコード...)
静的な設定ファイル
= STATIC_URL「/静的/」#静的リソースのみがアクセス可能なインタフェースのプレフィックス静的リソースのURLにアクセスするためには、ファイルパスを維持するために戻って、静的/最初/基づいていなければならない、と次の静的意味は同じではありません
STATICFILES_DIRS = [
はos.path .join(BASE_DIR、「静的」)、 #のフォルダインターフェイスが自動的に一つのフォルダ(静的、static1によって、リスト1に、ファイルパス接頭辞をバック開催しますので、あなたは、プレフィックスベースのインターフェースで始まるたら、... )ファイル検索
(BASE_DIR、 'static1')、os.path.join
os.path.join(BASE_DIR、 'STATIC2')を、
]
PS:キャッシュのクリア
デフォルトでは、あなただけのページにあなたができるいくつかの回をリフレッシュする必要があるので、自動再起動のDjangoのコードをサポートすることですが、時にはそれが再起動メカニズムが比較的遅いですよ
メカニズム:リアルタイム監視ファイルの変更限り、コードの変更が自動的にコードを再起動しますようではないかもしれませんこの時間は、エラーは自動的に終了します
6.静的ファイルインタフェースの接頭辞「動的解析」
静的ファイルのインタフェースのプレフィックスもともと/静的/それリーダーシップが必要な場合には、それを行うために/ XXX /どのように置き換え?手動で各HTMLを修正しますか?だから、千のHTMLをファイルがあるのですか?だから我々は移動を取得する必要があります
1.原生
<リンクのrel = "スタイルシート"のhref = "/静的/ブートストラップ-3.3.7-distの/ CSS / bootstrap.min.css">
<スクリプトSRC = "/静的/ブートストラップ-3.3.7-distの/ JS /ブートストラップ。 min.js "> </ SCRIPT>
2.利用解析器、动态获取接口前缀
{%負荷静的%}
<リンクREL ="スタイルシート"HREF =" {%静的 ' /ブートストラップブートストラップ3.3.7-DIST / CSS .min.css '%} ">
<スクリプトSRC =" {%静的'ブートストラップ3.3.7-DIST / JS / bootstrap.min.js '%}「> </ SCRIPT>
静的動的解像度ファイルのパス
{%}%負荷静的
{%スタティック「ファイルパス」%}
第二に、ログインページ
1.html完璧(フォームフォーム送信データ)
フォームフォームの送信データ 1.アクション (http://127.0.0.1:8080/index/?id=1)現在のURLへのデフォルトを記述しないでください1.提出 2.書き込みのみサフィックス/インデックス/または/インデックス/?ID = 1を 3.完全なパスを書く(あなたが他のサイトへのURLこのフォームデータを提出したい) 2.方法、 デフォルトで要求を取得し、ポストを変更する必要がある 3. GETリクエストパラメータとPOSTリクエストの特性運ぶ get要求は直接URLの後ろに始めていますか? &複数の条件への接続 /インデックス/?= ID。1
&ユーザ名=ジェイソン(リクエストパラメータのサイズが制限されている運ぶ取得) 要求されたデータはPOSTリクエストのボディであります
POSTリクエストメソッドで置き換えることができること
に、中間POSTリクエストの後にコメントアウトしたファイルへの設定が必要です
2.リクエストデータ取得遠位
フォームアクションの先から提出されたフォームデータ 1 。デフォルトでは、提出され、現在のアドレスに書き込みをしていない あなたはまた、接尾辞/インデックス/書き込みが可能2. (このプロジェクトを使用する) 3.また、あなたが全体のパスを書くことができ
、我々はここにあるポスト要求である、とアクションは、すなわちビュー機能のログイン、我々別途異なる要求のために、データは自動的に現在のパスに提出され、空であります
リクエストメソッドの知人は
request.method 全て上部遠位ストリング要求タイプ(GET / POST)を取得
`request.GET``が 大きい辞書と同様のGET要求によって運ばれるすべてのデータを取得し、リストされ
request.POSTの ポストを運ぶ取得要求すべてのデータは、大辞書に類似しているリストである
値は2分割されてrequest.POST.get(「趣味」) 撮影した最後の要素のデフォルトリスト
request.POST.getlist(「趣味」) 無傷のリストに直接固定撤回
3. pycharmデータベース接続
データ受信のフロントエンドが終了し、次のステップは、データベースが最初に接続され、比較データベースのデータを得ることです
あなたは、データベースpycharm操作に接続したいサイドバーのデータベースは、クライアントのデータベースとして機能します
4.djangoデータベースへの接続(******)
#Djangoのデフォルトが組み込まれて使用して、日付の非常に正確ではないsqliteのデータベース、
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
第一点: 如果你想让它其他的数据库 需要修改settings配置文件中配置
1. settings文件中配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'day38', 'HOST':'127.0.0.1', 'PORT':3306, 'USER':'root', 'PASSWORD':'123', 'CHARSET':'utf8' } }
第二点:如果此时启动项目会报错,说你没有导入mysqldb模块,这个模块已经不使用了,我们直接导入pymysql
2.还要在项目名下的init文件或者是应用名下的init文件中告诉django不要使用默认的mysqldb连接mysql,而是使用pymysql import pymysql pymysql.install_as_MySQLdb()
5.django orm 简介(数据库迁移)
强调:django orm不会帮你创建库,需要你自己手动创建库,它只能帮你创建表(建议你一个django就新建一个数据库)
1.首先需要在应用下的models.py中书写模型类 class User(models.Model): # django会默认给你的表创建一个名为id的主键字段 # id = models.AutoField(primary_key=True) # 一旦你自己指定了主键字段 那么django就不会自动再帮你创建了 username = models.CharField(max_length=32) # username varchar(32) CharField必须要指定max_length参数 password = models.IntegerField() # password int
2. 需要执行数据库迁移(同步)命令才能修改数据库(******) python3 manage.py makemigrations # 仅仅是在小本本上(migrations文件夹)记录数据库的修改 并不会直接操作数据 python3 manage.py migrate # 将数据库修改记录 真正同步到数据库 注意:只要动了models中跟数据库相关的代码 就必须重新执行上面的两条命令 缺一不可(******)
当你熟练掌握之后 你可以采用简写的方式
tools
run manage.py task
三、表单操作
1.表字段增删改查
表字段的增删改查 增 当一张表已经创建出来之后 后续还想添加字段,可以有两种方式 1.给新增的字段设置默认值 addr = models.CharField(max_length=32,default='China') # default该字段默认值 2.给新增的字段设置成可以为空 age = models.IntegerField(null=True) # 该字段允许为空 删 (慎用) 删除字段 直接在models.py中注释该字段 然后重新执行两条迁移(同步)命令即可 注意:执行完之后 表中该字段所对应的所有的数据全部删除 一般情况下 基本是不会用到真正意义上的删除
2.表记录的增删改查
#查询
表记录的增删改查 操作django orm都是以模型类名作为开头 先导入 from app01 import models 以用户的增删改查为例 先连接数据库展示所有用户信息 1.获取模型表中所有的数据 models.User.objects.all() # 结果也是querySet对象 只要是queryset对象 就可以点query查看内部sql语句 2.筛选相应的数据 1.直接获取对象的 models.User.objects.get(**kwargs) # 条件不存在 立刻报错 不推荐使用 2.获取querySet对象的( 1.querySet对象你可以把它看成是一个列表 里面放的是一个个的数据对象 2.querySet对象支持索引取值和切片操作 但是不支持负数 也不推荐你使用索引取值 建议你使用封装好的方法 ) queryset = models.User.objects.filter(**kwargs) # 括号内多个参数是and的关系 user_obj = querySet.first() # 没有也不会报错 直接返回None
# queryset 对象
""" 1.res = models.User.objects.filter(username=username,password=password) filter查询出来的结果是一个"列表 列表内放的才是一个个的数据对象本身" 当查询条件不存在的时候 不会报错 只会返回一个空列表 filter括号内 支持写多个参数 并且参数与参数之间是and的关系 2.querySet对象 支持正数索引取值支持切片,但是不推荐索引取值,一旦为空索引取值会报错(切出来的结果还是一个querySet对象) (如你通过名字查找有三个同名的列表里面会有三个对象,可以索引取值也可以切片取前两个对象),如:res[0:2] 3. user_obj = models.User.objects.filter(username=username).first() # 拿列表中第一个数据对象 用first虽然内部源码也是按照索引取值返回出来,但是没有数据时也不会报错,只会返回None 4.print(res.query) # 只有querySet对象才可以直接点query查看年内部对应的sql语句, filter拿到的结果就是一个querySet对象(你现在只需要知道filter拿到的结果就能够点query查看sql语句) 如:print(res.query) SELECT `app01_user`.`id`, `app01_user`.`username`, `app01_user`.`password` FROM `app01_user` WHERE (`app01_user`.`username` = jason AND `app01_user`.`password` = 123) """
#登录—— 获取数据库数据进行比对
user_obj = models.User.objects.filter(username=username).first() # 拿列表中第一个数据对象 if user_obj: if user_obj.password == password: return redirect('http://www.xiaohuar.com') #登陆成功重定向到网站 return HttpResponse('用户不存在 ')
#增
1.create()方法 res = models.User.objects.create(username=username,password=password) # insert into user(username,password) values(username,password) # create方法能够新增数据 并且有一个返回值,返回值就是新增的数据对象本身 # print(res.username) # print(res.password) 2.利用对象的绑定方法 user_obj = models.User(username=username,password=password) user_obj.save()
#注册功能
(先写urls路由与函数对应关系,再写注册html页面,再写注册函数新增用户)
#删和改
3.修改用户 1.利用queryset对象的update批量修改的方法 models.User.objects.filter(age = 18).update(**kwargs) # 会将queryset中所有的数据全部修改 2.利用对象修改属性的方法 user_obj = models.User.objects.filter(**kwargs).first() user_obj.username = 'jason' user_obj.save() # 该方法 会将数据库中所有的字段全部重写修改一遍 效率极低 不推荐使用 4.删除用户(不会真正删除数据 通常都是给数据加一个表示是否删除的字段) 1.利用queryset对象delete批量删除 models.User.objects.filter(age = 18).delete() # 会将queryset中所有的数据全部删除
#修改功能
#删除功能