mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-08-04 08:52:16 +02:00
Merge pull request #197 from cisagov/nmb/forms-sidebar
#174 Setup form pages for sidebar sections
This commit is contained in:
commit
4722ec43e8
16 changed files with 492 additions and 166 deletions
|
@ -2,6 +2,7 @@
|
|||
"urls": [
|
||||
"http://app:8080/",
|
||||
"http://app:8080/health/",
|
||||
"http://app:8080/whoami/"
|
||||
"http://app:8080/whoami/",
|
||||
"http://app:8080/register/"
|
||||
]
|
||||
}
|
||||
|
|
|
@ -15,6 +15,8 @@ oic = "*"
|
|||
pyjwkest = "*"
|
||||
psycopg2-binary = "*"
|
||||
whitenoise = "*"
|
||||
django-formtools = "*"
|
||||
django-widget-tweaks = "*"
|
||||
|
||||
[dev-packages]
|
||||
django-debug-toolbar = "*"
|
||||
|
@ -25,3 +27,4 @@ flake8 = "*"
|
|||
mypy = "*"
|
||||
types-requests = "*"
|
||||
django-stubs = "*"
|
||||
django-webtest = "*"
|
||||
|
|
357
src/Pipfile.lock
generated
357
src/Pipfile.lock
generated
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"_meta": {
|
||||
"hash": {
|
||||
"sha256": "4a80654b3a48bad09447fe8adb85f07f0df9be3b3c8b37341d5741b4dd919957"
|
||||
"sha256": "432db57cc28dd745dd6f514c642501a6c5de2a87d9bbe0a953be5bfd4f119d7d"
|
||||
},
|
||||
"pipfile-spec": 6,
|
||||
"requires": {},
|
||||
|
@ -177,11 +177,11 @@
|
|||
},
|
||||
"django": {
|
||||
"hashes": [
|
||||
"sha256:a153ffd5143bf26a877bfae2f4ec736ebd8924a46600ca089ad96b54a1d4e28e",
|
||||
"sha256:acb21fac9275f9972d81c7caf5761a89ec3ea25fe74545dd26b8a48cb3a0203e"
|
||||
"sha256:26dc24f99c8956374a054bcbf58aab8dc0cad2e6ac82b0fe036b752c00eee793",
|
||||
"sha256:b8d843714810ab88d59344507d4447be8b2cf12a49031363b6eed9f1b9b2280f"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==4.1.1"
|
||||
"version": "==4.1.2"
|
||||
},
|
||||
"django-allow-cidr": {
|
||||
"hashes": [
|
||||
|
@ -206,6 +206,22 @@
|
|||
"index": "pypi",
|
||||
"version": "==3.7"
|
||||
},
|
||||
"django-formtools": {
|
||||
"hashes": [
|
||||
"sha256:deb932be55b1d9419e37dc4d65dfbfeb8d307b71c8c11fd52f159aba5fc0deed",
|
||||
"sha256:f5f32f62ec8192cd1bc55bd929ca7dff5a5f2addf9027db95a5906ecfaa64836"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==2.4"
|
||||
},
|
||||
"django-widget-tweaks": {
|
||||
"hashes": [
|
||||
"sha256:9bfc5c705684754a83cc81da328b39ad1b80f32bd0f4340e2a810cbab4b0c00e",
|
||||
"sha256:fe6b17d5d595c63331f300917980db2afcf71f240ab9341b954aea8f45d25b9a"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==1.4.12"
|
||||
},
|
||||
"environs": {
|
||||
"extras": [
|
||||
"django"
|
||||
|
@ -334,68 +350,67 @@
|
|||
},
|
||||
"psycopg2-binary": {
|
||||
"hashes": [
|
||||
"sha256:01310cf4cf26db9aea5158c217caa92d291f0500051a6469ac52166e1a16f5b7",
|
||||
"sha256:083a55275f09a62b8ca4902dd11f4b33075b743cf0d360419e2051a8a5d5ff76",
|
||||
"sha256:090f3348c0ab2cceb6dfbe6bf721ef61262ddf518cd6cc6ecc7d334996d64efa",
|
||||
"sha256:0a29729145aaaf1ad8bafe663131890e2111f13416b60e460dae0a96af5905c9",
|
||||
"sha256:0c9d5450c566c80c396b7402895c4369a410cab5a82707b11aee1e624da7d004",
|
||||
"sha256:10bb90fb4d523a2aa67773d4ff2b833ec00857f5912bafcfd5f5414e45280fb1",
|
||||
"sha256:12b11322ea00ad8db8c46f18b7dfc47ae215e4df55b46c67a94b4effbaec7094",
|
||||
"sha256:152f09f57417b831418304c7f30d727dc83a12761627bb826951692cc6491e57",
|
||||
"sha256:15803fa813ea05bef089fa78835118b5434204f3a17cb9f1e5dbfd0b9deea5af",
|
||||
"sha256:15c4e4cfa45f5a60599d9cec5f46cd7b1b29d86a6390ec23e8eebaae84e64554",
|
||||
"sha256:183a517a3a63503f70f808b58bfbf962f23d73b6dccddae5aa56152ef2bcb232",
|
||||
"sha256:1f14c8b0942714eb3c74e1e71700cbbcb415acbc311c730370e70c578a44a25c",
|
||||
"sha256:1f6b813106a3abdf7b03640d36e24669234120c72e91d5cbaeb87c5f7c36c65b",
|
||||
"sha256:280b0bb5cbfe8039205c7981cceb006156a675362a00fe29b16fbc264e242834",
|
||||
"sha256:2d872e3c9d5d075a2e104540965a1cf898b52274a5923936e5bfddb58c59c7c2",
|
||||
"sha256:2f2534ab7dc7e776a263b463a16e189eb30e85ec9bbe1bff9e78dae802608932",
|
||||
"sha256:2f9ffd643bc7349eeb664eba8864d9e01f057880f510e4681ba40a6532f93c71",
|
||||
"sha256:3303f8807f342641851578ee7ed1f3efc9802d00a6f83c101d21c608cb864460",
|
||||
"sha256:35168209c9d51b145e459e05c31a9eaeffa9a6b0fd61689b48e07464ffd1a83e",
|
||||
"sha256:3a79d622f5206d695d7824cbf609a4f5b88ea6d6dab5f7c147fc6d333a8787e4",
|
||||
"sha256:404224e5fef3b193f892abdbf8961ce20e0b6642886cfe1fe1923f41aaa75c9d",
|
||||
"sha256:46f0e0a6b5fa5851bbd9ab1bc805eef362d3a230fbdfbc209f4a236d0a7a990d",
|
||||
"sha256:47133f3f872faf28c1e87d4357220e809dfd3fa7c64295a4a148bcd1e6e34ec9",
|
||||
"sha256:526ea0378246d9b080148f2d6681229f4b5964543c170dd10bf4faaab6e0d27f",
|
||||
"sha256:53293533fcbb94c202b7c800a12c873cfe24599656b341f56e71dd2b557be063",
|
||||
"sha256:539b28661b71da7c0e428692438efbcd048ca21ea81af618d845e06ebfd29478",
|
||||
"sha256:57804fc02ca3ce0dbfbef35c4b3a4a774da66d66ea20f4bda601294ad2ea6092",
|
||||
"sha256:63638d875be8c2784cfc952c9ac34e2b50e43f9f0a0660b65e2a87d656b3116c",
|
||||
"sha256:6472a178e291b59e7f16ab49ec8b4f3bdada0a879c68d3817ff0963e722a82ce",
|
||||
"sha256:68641a34023d306be959101b345732360fc2ea4938982309b786f7be1b43a4a1",
|
||||
"sha256:6e82d38390a03da28c7985b394ec3f56873174e2c88130e6966cb1c946508e65",
|
||||
"sha256:761df5313dc15da1502b21453642d7599d26be88bff659382f8f9747c7ebea4e",
|
||||
"sha256:7af0dd86ddb2f8af5da57a976d27cd2cd15510518d582b478fbb2292428710b4",
|
||||
"sha256:7b1e9b80afca7b7a386ef087db614faebbf8839b7f4db5eb107d0f1a53225029",
|
||||
"sha256:874a52ecab70af13e899f7847b3e074eeb16ebac5615665db33bce8a1009cf33",
|
||||
"sha256:887dd9aac71765ac0d0bac1d0d4b4f2c99d5f5c1382d8b770404f0f3d0ce8a39",
|
||||
"sha256:8b344adbb9a862de0c635f4f0425b7958bf5a4b927c8594e6e8d261775796d53",
|
||||
"sha256:8fc53f9af09426a61db9ba357865c77f26076d48669f2e1bb24d85a22fb52307",
|
||||
"sha256:91920527dea30175cc02a1099f331aa8c1ba39bf8b7762b7b56cbf54bc5cce42",
|
||||
"sha256:93cd1967a18aa0edd4b95b1dfd554cf15af657cb606280996d393dadc88c3c35",
|
||||
"sha256:99485cab9ba0fa9b84f1f9e1fef106f44a46ef6afdeec8885e0b88d0772b49e8",
|
||||
"sha256:9d29409b625a143649d03d0fd7b57e4b92e0ecad9726ba682244b73be91d2fdb",
|
||||
"sha256:a29b3ca4ec9defec6d42bf5feb36bb5817ba3c0230dd83b4edf4bf02684cd0ae",
|
||||
"sha256:a9e1f75f96ea388fbcef36c70640c4efbe4650658f3d6a2967b4cc70e907352e",
|
||||
"sha256:accfe7e982411da3178ec690baaceaad3c278652998b2c45828aaac66cd8285f",
|
||||
"sha256:adf20d9a67e0b6393eac162eb81fb10bc9130a80540f4df7e7355c2dd4af9fba",
|
||||
"sha256:af9813db73395fb1fc211bac696faea4ca9ef53f32dc0cfa27e4e7cf766dcf24",
|
||||
"sha256:b1c8068513f5b158cf7e29c43a77eb34b407db29aca749d3eb9293ee0d3103ca",
|
||||
"sha256:b3a24a1982ae56461cc24f6680604fffa2c1b818e9dc55680da038792e004d18",
|
||||
"sha256:bda845b664bb6c91446ca9609fc69f7db6c334ec5e4adc87571c34e4f47b7ddb",
|
||||
"sha256:c381bda330ddf2fccbafab789d83ebc6c53db126e4383e73794c74eedce855ef",
|
||||
"sha256:c3ae8e75eb7160851e59adc77b3a19a976e50622e44fd4fd47b8b18208189d42",
|
||||
"sha256:d1c1b569ecafe3a69380a94e6ae09a4789bbb23666f3d3a08d06bbd2451f5ef1",
|
||||
"sha256:def68d7c21984b0f8218e8a15d514f714d96904265164f75f8d3a70f9c295667",
|
||||
"sha256:dffc08ca91c9ac09008870c9eb77b00a46b3378719584059c034b8945e26b272",
|
||||
"sha256:e3699852e22aa68c10de06524a3721ade969abf382da95884e6a10ff798f9281",
|
||||
"sha256:e6aa71ae45f952a2205377773e76f4e3f27951df38e69a4c95440c779e013560",
|
||||
"sha256:e847774f8ffd5b398a75bc1c18fbb56564cda3d629fe68fd81971fece2d3c67e",
|
||||
"sha256:ffb7a888a047696e7f8240d649b43fb3644f14f0ee229077e7f6b9f9081635bd"
|
||||
"sha256:00475004e5ed3e3bf5e056d66e5dcdf41a0dc62efcd57997acd9135c40a08a50",
|
||||
"sha256:01ad49d68dd8c5362e4bfb4158f2896dc6e0c02e87b8a3770fc003459f1a4425",
|
||||
"sha256:024030b13bdcbd53d8a93891a2cf07719715724fc9fee40243f3bd78b4264b8f",
|
||||
"sha256:043a9fd45a03858ff72364b4b75090679bd875ee44df9c0613dc862ca6b98460",
|
||||
"sha256:05b3d479425e047c848b9782cd7aac9c6727ce23181eb9647baf64ffdfc3da41",
|
||||
"sha256:0775d6252ccb22b15da3b5d7adbbf8cfe284916b14b6dc0ff503a23edb01ee85",
|
||||
"sha256:1e491e6489a6cb1d079df8eaa15957c277fdedb102b6a68cfbf40c4994412fd0",
|
||||
"sha256:212757ffcecb3e1a5338d4e6761bf9c04f750e7d027117e74aa3cd8a75bb6fbd",
|
||||
"sha256:215d6bf7e66732a514f47614f828d8c0aaac9a648c46a831955cb103473c7147",
|
||||
"sha256:25382c7d174c679ce6927c16b6fbb68b10e56ee44b1acb40671e02d29f2fce7c",
|
||||
"sha256:2d964eb24c8b021623df1c93c626671420c6efadbdb8655cb2bd5e0c6fa422ba",
|
||||
"sha256:2ec46ed947801652c9643e0b1dc334cfb2781232e375ba97312c2fc256597632",
|
||||
"sha256:2ef892cabdccefe577088a79580301f09f2a713eb239f4f9f62b2b29cafb0577",
|
||||
"sha256:33e632d0885b95a8b97165899006c40e9ecdc634a529dca7b991eb7de4ece41c",
|
||||
"sha256:3520d7af1ebc838cc6084a3281145d5cd5bdd43fdef139e6db5af01b92596cb7",
|
||||
"sha256:422e3d43b47ac20141bc84b3d342eead8d8099a62881a501e97d15f6addabfe9",
|
||||
"sha256:46512486be6fbceef51d7660dec017394ba3e170299d1dc30928cbedebbf103a",
|
||||
"sha256:46850a640df62ae940e34a163f72e26aca1f88e2da79148e1862faaac985c302",
|
||||
"sha256:56b2957a145f816726b109ee3d4e6822c23f919a7d91af5a94593723ed667835",
|
||||
"sha256:5c6527c8efa5226a9e787507652dd5ba97b62d29b53c371a85cd13f957fe4d42",
|
||||
"sha256:5cbc554ba47ecca8cd3396ddaca85e1ecfe3e48dd57dc5e415e59551affe568e",
|
||||
"sha256:5d28ecdf191db558d0c07d0f16524ee9d67896edf2b7990eea800abeb23ebd61",
|
||||
"sha256:5fc447058d083b8c6ac076fc26b446d44f0145308465d745fba93a28c14c9e32",
|
||||
"sha256:63e318dbe52709ed10d516a356f22a635e07a2e34c68145484ed96a19b0c4c68",
|
||||
"sha256:68d81a2fe184030aa0c5c11e518292e15d342a667184d91e30644c9d533e53e1",
|
||||
"sha256:6e63814ec71db9bdb42905c925639f319c80e7909fb76c3b84edc79dadef8d60",
|
||||
"sha256:6f8a9bcab7b6db2e3dbf65b214dfc795b4c6b3bb3af922901b6a67f7cb47d5f8",
|
||||
"sha256:70831e03bd53702c941da1a1ad36c17d825a24fbb26857b40913d58df82ec18b",
|
||||
"sha256:74eddec4537ab1f701a1647214734bc52cee2794df748f6ae5908e00771f180a",
|
||||
"sha256:7cf1d44e710ca3a9ce952bda2855830fe9f9017ed6259e01fcd71ea6287565f5",
|
||||
"sha256:7d07f552d1e412f4b4e64ce386d4c777a41da3b33f7098b6219012ba534fb2c2",
|
||||
"sha256:7d88db096fa19d94f433420eaaf9f3c45382da2dd014b93e4bf3215639047c16",
|
||||
"sha256:7ee3095d02d6f38bd7d9a5358fcc9ea78fcdb7176921528dd709cc63f40184f5",
|
||||
"sha256:902844f9c4fb19b17dfa84d9e2ca053d4a4ba265723d62ea5c9c26b38e0aa1e6",
|
||||
"sha256:95076399ec3b27a8f7fa1cc9a83417b1c920d55cf7a97f718a94efbb96c7f503",
|
||||
"sha256:9c38d3869238e9d3409239bc05bc27d6b7c99c2a460ea337d2814b35fb4fea1b",
|
||||
"sha256:9e32cedc389bcb76d9f24ea8a012b3cb8385ee362ea437e1d012ffaed106c17d",
|
||||
"sha256:9ffdc51001136b699f9563b1c74cc1f8c07f66ef7219beb6417a4c8aaa896c28",
|
||||
"sha256:a0adef094c49f242122bb145c3c8af442070dc0e4312db17e49058c1702606d4",
|
||||
"sha256:a7e518a0911c50f60313cb9e74a169a65b5d293770db4770ebf004245f24b5c5",
|
||||
"sha256:af0516e1711995cb08dc19bbd05bec7dbdebf4185f68870595156718d237df3e",
|
||||
"sha256:b911dfb727e247340d36ae20c4b9259e4a64013ab9888ccb3cbba69b77fd9636",
|
||||
"sha256:b9a794cef1d9c1772b94a72eec6da144c18e18041d294a9ab47669bc77a80c1d",
|
||||
"sha256:b9c33d4aef08dfecbd1736ceab8b7b3c4358bf10a0121483e5cd60d3d308cc64",
|
||||
"sha256:b9d38a4656e4e715d637abdf7296e98d6267df0cc0a8e9a016f8ba07e4aa3eeb",
|
||||
"sha256:bcda1c84a1c533c528356da5490d464a139b6e84eb77cc0b432e38c5c6dd7882",
|
||||
"sha256:c15ba5982c177bc4b23a7940c7e4394197e2d6a424a2d282e7c236b66da6d896",
|
||||
"sha256:c5254cbd4f4855e11cebf678c1a848a3042d455a22a4ce61349c36aafd4c2267",
|
||||
"sha256:c5682a45df7d9642eff590abc73157c887a68f016df0a8ad722dcc0f888f56d7",
|
||||
"sha256:c5e65c6ac0ae4bf5bef1667029f81010b6017795dcb817ba5c7b8a8d61fab76f",
|
||||
"sha256:d4c7b3a31502184e856df1f7bbb2c3735a05a8ce0ade34c5277e1577738a5c91",
|
||||
"sha256:d892bfa1d023c3781a3cab8dd5af76b626c483484d782e8bd047c180db590e4c",
|
||||
"sha256:dbc332beaf8492b5731229a881807cd7b91b50dbbbaf7fe2faf46942eda64a24",
|
||||
"sha256:dc85b3777068ed30aff8242be2813038a929f2084f69e43ef869daddae50f6ee",
|
||||
"sha256:e59137cdb970249ae60be2a49774c6dfb015bd0403f05af1fe61862e9626642d",
|
||||
"sha256:e67b3c26e9b6d37b370c83aa790bbc121775c57bfb096c2e77eacca25fd0233b",
|
||||
"sha256:e72c91bda9880f097c8aa3601a2c0de6c708763ba8128006151f496ca9065935",
|
||||
"sha256:f95b8aca2703d6a30249f83f4fe6a9abf2e627aa892a5caaab2267d56be7ab69"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==2.9.3"
|
||||
"version": "==2.9.5"
|
||||
},
|
||||
"pycparser": {
|
||||
"hashes": [
|
||||
|
@ -473,11 +488,11 @@
|
|||
},
|
||||
"setuptools": {
|
||||
"hashes": [
|
||||
"sha256:a8f6e213b4b0661f590ccf40de95d28a177cd747d098624ad3f69c40287297e9",
|
||||
"sha256:c2d2709550f15aab6c9110196ea312f468f41cd546bceb24127a1be6fdcaeeb1"
|
||||
"sha256:512e5536220e38146176efb833d4a62aa726b7bbff82cfbc8ba9eaa3996e0b17",
|
||||
"sha256:f62ea9da9ed6289bfe868cd6845968a2c854d1427f8548d52cae02a42b4f0356"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==65.4.0"
|
||||
"version": "==65.5.0"
|
||||
},
|
||||
"six": {
|
||||
"hashes": [
|
||||
|
@ -497,11 +512,11 @@
|
|||
},
|
||||
"typing-extensions": {
|
||||
"hashes": [
|
||||
"sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02",
|
||||
"sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"
|
||||
"sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa",
|
||||
"sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==4.3.0"
|
||||
"version": "==4.4.0"
|
||||
},
|
||||
"urllib3": {
|
||||
"hashes": [
|
||||
|
@ -537,34 +552,40 @@
|
|||
"index": "pypi",
|
||||
"version": "==1.7.4"
|
||||
},
|
||||
"beautifulsoup4": {
|
||||
"hashes": [
|
||||
"sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30",
|
||||
"sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==4.11.1"
|
||||
},
|
||||
"black": {
|
||||
"hashes": [
|
||||
"sha256:0a12e4e1353819af41df998b02c6742643cfef58282915f781d0e4dd7a200411",
|
||||
"sha256:0ad827325a3a634bae88ae7747db1a395d5ee02cf05d9aa7a9bd77dfb10e940c",
|
||||
"sha256:32a4b17f644fc288c6ee2bafdf5e3b045f4eff84693ac069d87b1a347d861497",
|
||||
"sha256:3b2c25f8dea5e8444bdc6788a2f543e1fb01494e144480bc17f806178378005e",
|
||||
"sha256:4a098a69a02596e1f2a58a2a1c8d5a05d5a74461af552b371e82f9fa4ada8342",
|
||||
"sha256:5107ea36b2b61917956d018bd25129baf9ad1125e39324a9b18248d362156a27",
|
||||
"sha256:53198e28a1fb865e9fe97f88220da2e44df6da82b18833b588b1883b16bb5d41",
|
||||
"sha256:5594efbdc35426e35a7defa1ea1a1cb97c7dbd34c0e49af7fb593a36bd45edab",
|
||||
"sha256:5b879eb439094751185d1cfdca43023bc6786bd3c60372462b6f051efa6281a5",
|
||||
"sha256:78dd85caaab7c3153054756b9fe8c611efa63d9e7aecfa33e533060cb14b6d16",
|
||||
"sha256:792f7eb540ba9a17e8656538701d3eb1afcb134e3b45b71f20b25c77a8db7e6e",
|
||||
"sha256:8ce13ffed7e66dda0da3e0b2eb1bdfc83f5812f66e09aca2b0978593ed636b6c",
|
||||
"sha256:a05da0430bd5ced89176db098567973be52ce175a55677436a271102d7eaa3fe",
|
||||
"sha256:a983526af1bea1e4cf6768e649990f28ee4f4137266921c2c3cee8116ae42ec3",
|
||||
"sha256:bc4d4123830a2d190e9cc42a2e43570f82ace35c3aeb26a512a2102bce5af7ec",
|
||||
"sha256:c3a73f66b6d5ba7288cd5d6dad9b4c9b43f4e8a4b789a94bf5abfb878c663eb3",
|
||||
"sha256:ce957f1d6b78a8a231b18e0dd2d94a33d2ba738cd88a7fe64f53f659eea49fdd",
|
||||
"sha256:cea1b2542d4e2c02c332e83150e41e3ca80dc0fb8de20df3c5e98e242156222c",
|
||||
"sha256:d2c21d439b2baf7aa80d6dd4e3659259be64c6f49dfd0f32091063db0e006db4",
|
||||
"sha256:d839150f61d09e7217f52917259831fe2b689f5c8e5e32611736351b89bb2a90",
|
||||
"sha256:dd82842bb272297503cbec1a2600b6bfb338dae017186f8f215c8958f8acf869",
|
||||
"sha256:e8166b7bfe5dcb56d325385bd1d1e0f635f24aae14b3ae437102dedc0c186747",
|
||||
"sha256:e981e20ec152dfb3e77418fb616077937378b322d7b26aa1ff87717fb18b4875"
|
||||
"sha256:14ff67aec0a47c424bc99b71005202045dc09270da44a27848d534600ac64fc7",
|
||||
"sha256:197df8509263b0b8614e1df1756b1dd41be6738eed2ba9e9769f3880c2b9d7b6",
|
||||
"sha256:1e464456d24e23d11fced2bc8c47ef66d471f845c7b7a42f3bd77bf3d1789650",
|
||||
"sha256:2039230db3c6c639bd84efe3292ec7b06e9214a2992cd9beb293d639c6402edb",
|
||||
"sha256:21199526696b8f09c3997e2b4db8d0b108d801a348414264d2eb8eb2532e540d",
|
||||
"sha256:2644b5d63633702bc2c5f3754b1b475378fbbfb481f62319388235d0cd104c2d",
|
||||
"sha256:432247333090c8c5366e69627ccb363bc58514ae3e63f7fc75c54b1ea80fa7de",
|
||||
"sha256:444ebfb4e441254e87bad00c661fe32df9969b2bf224373a448d8aca2132b395",
|
||||
"sha256:5b9b29da4f564ba8787c119f37d174f2b69cdfdf9015b7d8c5c16121ddc054ae",
|
||||
"sha256:5cc42ca67989e9c3cf859e84c2bf014f6633db63d1cbdf8fdb666dcd9e77e3fa",
|
||||
"sha256:5d8f74030e67087b219b032aa33a919fae8806d49c867846bfacde57f43972ef",
|
||||
"sha256:72ef3925f30e12a184889aac03d77d031056860ccae8a1e519f6cbb742736383",
|
||||
"sha256:819dc789f4498ecc91438a7de64427c73b45035e2e3680c92e18795a839ebb66",
|
||||
"sha256:915ace4ff03fdfff953962fa672d44be269deb2eaf88499a0f8805221bc68c87",
|
||||
"sha256:9311e99228ae10023300ecac05be5a296f60d2fd10fff31cf5c1fa4ca4b1988d",
|
||||
"sha256:974308c58d057a651d182208a484ce80a26dac0caef2895836a92dd6ebd725e0",
|
||||
"sha256:b8b49776299fece66bffaafe357d929ca9451450f5466e997a7285ab0fe28e3b",
|
||||
"sha256:c957b2b4ea88587b46cf49d1dc17681c1e672864fd7af32fc1e9664d572b3458",
|
||||
"sha256:e41a86c6c650bcecc6633ee3180d80a025db041a8e2398dcc059b3afa8382cd4",
|
||||
"sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1",
|
||||
"sha256:fba8a281e570adafb79f7755ac8721b6cf1bbf691186a287e990c7929c7692ff"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==22.8.0"
|
||||
"version": "==22.10.0"
|
||||
},
|
||||
"blinker": {
|
||||
"hashes": [
|
||||
|
@ -579,16 +600,16 @@
|
|||
"sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e",
|
||||
"sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"markers": "python_full_version >= '3.7.0'",
|
||||
"version": "==8.1.3"
|
||||
},
|
||||
"django": {
|
||||
"hashes": [
|
||||
"sha256:a153ffd5143bf26a877bfae2f4ec736ebd8924a46600ca089ad96b54a1d4e28e",
|
||||
"sha256:acb21fac9275f9972d81c7caf5761a89ec3ea25fe74545dd26b8a48cb3a0203e"
|
||||
"sha256:26dc24f99c8956374a054bcbf58aab8dc0cad2e6ac82b0fe036b752c00eee793",
|
||||
"sha256:b8d843714810ab88d59344507d4447be8b2cf12a49031363b6eed9f1b9b2280f"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==4.1.1"
|
||||
"version": "==4.1.2"
|
||||
},
|
||||
"django-debug-toolbar": {
|
||||
"hashes": [
|
||||
|
@ -614,6 +635,14 @@
|
|||
"markers": "python_version >= '3.6'",
|
||||
"version": "==0.5.0"
|
||||
},
|
||||
"django-webtest": {
|
||||
"hashes": [
|
||||
"sha256:c8c32041791cdae468e443097c432c67cf17cad339e1ab88b01a6c4841ee4c74",
|
||||
"sha256:ef075e98b38fe3836dc533c2924d3e37c6bb3483008c40567115518a0303b1af"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==1.9.10"
|
||||
},
|
||||
"flake8": {
|
||||
"hashes": [
|
||||
"sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db",
|
||||
|
@ -632,11 +661,11 @@
|
|||
},
|
||||
"gitpython": {
|
||||
"hashes": [
|
||||
"sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704",
|
||||
"sha256:5b68b000463593e05ff2b261acff0ff0972df8ab1b70d3cdbd41b546c8b8fc3d"
|
||||
"sha256:41eea0deec2deea139b459ac03656f0dd28fc4a3387240ec1d3c259a2c47850f",
|
||||
"sha256:cc36bfc4a3f913e66805a28e84703e419d9c264c1077e537b54f0e1af85dbefd"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==3.1.27"
|
||||
"markers": "python_full_version >= '3.7.0'",
|
||||
"version": "==3.1.29"
|
||||
},
|
||||
"mccabe": {
|
||||
"hashes": [
|
||||
|
@ -648,33 +677,33 @@
|
|||
},
|
||||
"mypy": {
|
||||
"hashes": [
|
||||
"sha256:06e1eac8d99bd404ed8dd34ca29673c4346e76dd8e612ea507763dccd7e13c7a",
|
||||
"sha256:2ee3dbc53d4df7e6e3b1c68ac6a971d3a4fb2852bf10a05fda228721dd44fae1",
|
||||
"sha256:4bc460e43b7785f78862dab78674e62ec3cd523485baecfdf81a555ed29ecfa0",
|
||||
"sha256:64e1f6af81c003f85f0dfed52db632817dabb51b65c0318ffbf5ff51995bbb08",
|
||||
"sha256:6e35d764784b42c3e256848fb8ed1d4292c9fc0098413adb28d84974c095b279",
|
||||
"sha256:6ee196b1d10b8b215e835f438e06965d7a480f6fe016eddbc285f13955cca659",
|
||||
"sha256:756fad8b263b3ba39e4e204ee53042671b660c36c9017412b43af210ddee7b08",
|
||||
"sha256:77f8fcf7b4b3cc0c74fb33ae54a4cd00bb854d65645c48beccf65fa10b17882c",
|
||||
"sha256:794f385653e2b749387a42afb1e14c2135e18daeb027e0d97162e4b7031210f8",
|
||||
"sha256:8ad21d4c9d3673726cf986ea1d0c9fb66905258709550ddf7944c8f885f208be",
|
||||
"sha256:8e8e49aa9cc23aa4c926dc200ce32959d3501c4905147a66ce032f05cb5ecb92",
|
||||
"sha256:9f362470a3480165c4c6151786b5379351b790d56952005be18bdbdd4c7ce0ae",
|
||||
"sha256:a16a0145d6d7d00fbede2da3a3096dcc9ecea091adfa8da48fa6a7b75d35562d",
|
||||
"sha256:ad77c13037d3402fbeffda07d51e3f228ba078d1c7096a73759c9419ea031bf4",
|
||||
"sha256:b6ede64e52257931315826fdbfc6ea878d89a965580d1a65638ef77cb551f56d",
|
||||
"sha256:c9e0efb95ed6ca1654951bd5ec2f3fa91b295d78bf6527e026529d4aaa1e0c30",
|
||||
"sha256:ce65f70b14a21fdac84c294cde75e6dbdabbcff22975335e20827b3b94bdbf49",
|
||||
"sha256:d1debb09043e1f5ee845fa1e96d180e89115b30e47c5d3ce53bc967bab53f62d",
|
||||
"sha256:e178eaffc3c5cd211a87965c8c0df6da91ed7d258b5fc72b8e047c3771317ddb",
|
||||
"sha256:e1acf62a8c4f7c092462c738aa2c2489e275ed386320c10b2e9bff31f6f7e8d6",
|
||||
"sha256:e53773073c864d5f5cec7f3fc72fbbcef65410cde8cc18d4f7242dea60dac52e",
|
||||
"sha256:eb3978b191b9fa0488524bb4ffedf2c573340e8c2b4206fc191d44c7093abfb7",
|
||||
"sha256:f64d2ce043a209a297df322eb4054dfbaa9de9e8738291706eaafda81ab2b362",
|
||||
"sha256:fa38f82f53e1e7beb45557ff167c177802ba7b387ad017eab1663d567017c8ee"
|
||||
"sha256:1021c241e8b6e1ca5a47e4d52601274ac078a89845cfde66c6d5f769819ffa1d",
|
||||
"sha256:14d53cdd4cf93765aa747a7399f0961a365bcddf7855d9cef6306fa41de01c24",
|
||||
"sha256:175f292f649a3af7082fe36620369ffc4661a71005aa9f8297ea473df5772046",
|
||||
"sha256:26ae64555d480ad4b32a267d10cab7aec92ff44de35a7cd95b2b7cb8e64ebe3e",
|
||||
"sha256:41fd1cf9bc0e1c19b9af13a6580ccb66c381a5ee2cf63ee5ebab747a4badeba3",
|
||||
"sha256:5085e6f442003fa915aeb0a46d4da58128da69325d8213b4b35cc7054090aed5",
|
||||
"sha256:58f27ebafe726a8e5ccb58d896451dd9a662a511a3188ff6a8a6a919142ecc20",
|
||||
"sha256:6389af3e204975d6658de4fb8ac16f58c14e1bacc6142fee86d1b5b26aa52bda",
|
||||
"sha256:724d36be56444f569c20a629d1d4ee0cb0ad666078d59bb84f8f887952511ca1",
|
||||
"sha256:75838c649290d83a2b83a88288c1eb60fe7a05b36d46cbea9d22efc790002146",
|
||||
"sha256:7b35ce03a289480d6544aac85fa3674f493f323d80ea7226410ed065cd46f206",
|
||||
"sha256:85f7a343542dc8b1ed0a888cdd34dca56462654ef23aa673907305b260b3d746",
|
||||
"sha256:86ebe67adf4d021b28c3f547da6aa2cce660b57f0432617af2cca932d4d378a6",
|
||||
"sha256:8ee8c2472e96beb1045e9081de8e92f295b89ac10c4109afdf3a23ad6e644f3e",
|
||||
"sha256:91781eff1f3f2607519c8b0e8518aad8498af1419e8442d5d0afb108059881fc",
|
||||
"sha256:a692a8e7d07abe5f4b2dd32d731812a0175626a90a223d4b58f10f458747dd8a",
|
||||
"sha256:a705a93670c8b74769496280d2fe6cd59961506c64f329bb179970ff1d24f9f8",
|
||||
"sha256:c6e564f035d25c99fd2b863e13049744d96bd1947e3d3d2f16f5828864506763",
|
||||
"sha256:cebca7fd333f90b61b3ef7f217ff75ce2e287482206ef4a8b18f32b49927b1a2",
|
||||
"sha256:d6af646bd46f10d53834a8e8983e130e47d8ab2d4b7a97363e35b24e1d588947",
|
||||
"sha256:e7aeaa763c7ab86d5b66ff27f68493d672e44c8099af636d433a7f3fa5596d40",
|
||||
"sha256:eaa97b9ddd1dd9901a22a879491dbb951b5dec75c3b90032e2baa7336777363b",
|
||||
"sha256:eb7a068e503be3543c4bd329c994103874fa543c1727ba5288393c21d912d795",
|
||||
"sha256:f793e3dd95e166b66d50e7b63e69e58e88643d80a3dcc3bcd81368e0478b089c"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==0.981"
|
||||
"version": "==0.982"
|
||||
},
|
||||
"mypy-extensions": {
|
||||
"hashes": [
|
||||
|
@ -696,23 +725,23 @@
|
|||
"sha256:46846318467efc4556ccfd27816e004270a9eeeeb4d062ce5e6fc7a87c573f93",
|
||||
"sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"markers": "python_full_version >= '3.7.0'",
|
||||
"version": "==0.10.1"
|
||||
},
|
||||
"pbr": {
|
||||
"hashes": [
|
||||
"sha256:cfcc4ff8e698256fc17ea3ff796478b050852585aa5bae79ecd05b2ab7b39b9a",
|
||||
"sha256:da3e18aac0a3c003e9eea1a81bd23e5a3a75d745670dcf736317b7d966887fdf"
|
||||
"sha256:b97bc6695b2aff02144133c2e7399d5885223d42b7912ffaec2ca3898e673bfe",
|
||||
"sha256:db2317ff07c84c4c63648c9064a79fe9d9f5c7ce85a9099d4b6258b3db83225a"
|
||||
],
|
||||
"markers": "python_version >= '2.6'",
|
||||
"version": "==5.10.0"
|
||||
"version": "==5.11.0"
|
||||
},
|
||||
"platformdirs": {
|
||||
"hashes": [
|
||||
"sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788",
|
||||
"sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"markers": "python_full_version >= '3.7.0'",
|
||||
"version": "==2.5.2"
|
||||
},
|
||||
"pycodestyle": {
|
||||
|
@ -793,6 +822,14 @@
|
|||
"markers": "python_version >= '3.6'",
|
||||
"version": "==5.0.0"
|
||||
},
|
||||
"soupsieve": {
|
||||
"hashes": [
|
||||
"sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759",
|
||||
"sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==2.3.2.post1"
|
||||
},
|
||||
"sqlparse": {
|
||||
"hashes": [
|
||||
"sha256:0323c0ec29cd52bceabc1b4d9d579e311f3e4961b98d174201d5622a23b85e34",
|
||||
|
@ -803,26 +840,26 @@
|
|||
},
|
||||
"stevedore": {
|
||||
"hashes": [
|
||||
"sha256:87e4d27fe96d0d7e4fc24f0cbe3463baae4ec51e81d95fbe60d2474636e0c7d8",
|
||||
"sha256:f82cc99a1ff552310d19c379827c2c64dd9f85a38bcd5559db2470161867b786"
|
||||
"sha256:02518a8f0d6d29be8a445b7f2ac63753ff29e8f2a2faa01777568d5500d777a6",
|
||||
"sha256:3b1cbd592a87315f000d05164941ee5e164899f8fc0ce9a00bb0f321f40ef93e"
|
||||
],
|
||||
"markers": "python_version >= '3.8'",
|
||||
"version": "==4.0.0"
|
||||
"version": "==4.1.0"
|
||||
},
|
||||
"tomli": {
|
||||
"hashes": [
|
||||
"sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc",
|
||||
"sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"
|
||||
],
|
||||
"markers": "python_full_version < '3.11.0a7'",
|
||||
"markers": "python_full_version >= '3.7.0'",
|
||||
"version": "==2.0.1"
|
||||
},
|
||||
"types-pytz": {
|
||||
"hashes": [
|
||||
"sha256:47cfb19c52b9f75896440541db392fd312a35b279c6307a531db71152ea63e2b",
|
||||
"sha256:50ead2254b524a3d4153bc65d00289b66898060d2938e586170dce918dbaf3b3"
|
||||
"sha256:0c163b15d3e598e6cc7074a99ca9ec72b25dc1b446acc133b827667af0b7b09a",
|
||||
"sha256:a8e1fe6a1b270fbfaf2553b20ad0f1316707cc320e596da903bb17d7373fed2d"
|
||||
],
|
||||
"version": "==2022.2.1.0"
|
||||
"version": "==2022.5.0.0"
|
||||
},
|
||||
"types-pyyaml": {
|
||||
"hashes": [
|
||||
|
@ -833,26 +870,50 @@
|
|||
},
|
||||
"types-requests": {
|
||||
"hashes": [
|
||||
"sha256:7ee827eb8ce611b02b5117cfec5da6455365b6a575f5e3ff19f655ba603e6b4e",
|
||||
"sha256:af5f55e803cabcfb836dad752bd6d8a0fc8ef1cd84243061c0e27dee04ccf4fd"
|
||||
"sha256:14941f8023a80b16441b3b46caffcbfce5265fd14555844d6029697824b5a2ef",
|
||||
"sha256:fdcd7bd148139fb8eef72cf4a41ac7273872cad9e6ada14b11ff5dfdeee60ed3"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==2.28.11"
|
||||
"version": "==2.28.11.2"
|
||||
},
|
||||
"types-urllib3": {
|
||||
"hashes": [
|
||||
"sha256:5aef0e663724eef924afa8b320b62ffef2c1736c1fa6caecfc9bc6c8ae2c3def",
|
||||
"sha256:c1d78cef7bd581e162e46c20a57b2e1aa6ebecdcf01fd0713bb90978ff3e3427"
|
||||
"sha256:a948584944b2412c9a74b9cf64f6c48caf8652cb88b38361316f6d15d8a184cd",
|
||||
"sha256:f6422596cc9ee5fdf68f9d547f541096a20c2dcfd587e37c804c9ea720bf5cb2"
|
||||
],
|
||||
"version": "==1.26.25"
|
||||
"version": "==1.26.25.1"
|
||||
},
|
||||
"typing-extensions": {
|
||||
"hashes": [
|
||||
"sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02",
|
||||
"sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"
|
||||
"sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa",
|
||||
"sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==4.3.0"
|
||||
"version": "==4.4.0"
|
||||
},
|
||||
"waitress": {
|
||||
"hashes": [
|
||||
"sha256:7500c9625927c8ec60f54377d590f67b30c8e70ef4b8894214ac6e4cad233d2a",
|
||||
"sha256:780a4082c5fbc0fde6a2fcfe5e26e6efc1e8f425730863c04085769781f51eba"
|
||||
],
|
||||
"markers": "python_full_version >= '3.7.0'",
|
||||
"version": "==2.1.2"
|
||||
},
|
||||
"webob": {
|
||||
"hashes": [
|
||||
"sha256:73aae30359291c14fa3b956f8b5ca31960e420c28c1bec002547fb04928cf89b",
|
||||
"sha256:b64ef5141be559cfade448f044fa45c2260351edcb6a8ef6b7e00c7dcef0c323"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==1.8.7"
|
||||
},
|
||||
"webtest": {
|
||||
"hashes": [
|
||||
"sha256:2a001a9efa40d2a7e5d9cd8d1527c75f41814eb6afce2c3d207402547b1e5ead",
|
||||
"sha256:54bd969725838d9861a9fa27f8d971f79d275d94ae255f5c501f53bb6d9929eb"
|
||||
],
|
||||
"markers": "python_version >= '3.6' and python_version < '4'",
|
||||
"version": "==3.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -84,6 +84,8 @@ INSTALLED_APPS = [
|
|||
"django.contrib.staticfiles",
|
||||
# application used for integrating with Login.gov
|
||||
"djangooidc",
|
||||
# library to simplify form templating
|
||||
"widget_tweaks",
|
||||
# let's be sure to install our own application!
|
||||
"registrar",
|
||||
]
|
||||
|
|
|
@ -10,6 +10,12 @@ from django.urls import include, path
|
|||
from django.views.generic import RedirectView
|
||||
|
||||
from registrar.views import health, index, profile, whoami
|
||||
from registrar.forms import ApplicationWizard
|
||||
|
||||
APPLICATION_URL_NAME = "application_step"
|
||||
application_wizard = ApplicationWizard.as_view(
|
||||
url_name=APPLICATION_URL_NAME, done_step_name="finished"
|
||||
)
|
||||
|
||||
urlpatterns = [
|
||||
path("", index.index, name="home"),
|
||||
|
@ -18,6 +24,8 @@ urlpatterns = [
|
|||
path("health/", health.health),
|
||||
path("edit_profile/", profile.edit_profile, name="edit-profile"),
|
||||
path("openid/", include("djangooidc.urls")),
|
||||
path("register/", application_wizard, name="application"),
|
||||
path("register/<step>/", application_wizard, name=APPLICATION_URL_NAME),
|
||||
]
|
||||
|
||||
if not settings.DEBUG:
|
||||
|
|
4
src/registrar/forms/__init__.py
Normal file
4
src/registrar/forms/__init__.py
Normal file
|
@ -0,0 +1,4 @@
|
|||
from .edit_profile import EditProfileForm
|
||||
from .application_wizard import ApplicationWizard
|
||||
|
||||
__all__ = ["EditProfileForm", "ApplicationWizard"]
|
100
src/registrar/forms/application_wizard.py
Normal file
100
src/registrar/forms/application_wizard.py
Normal file
|
@ -0,0 +1,100 @@
|
|||
"""Forms Wizard for creating a new domain application."""
|
||||
|
||||
import logging
|
||||
|
||||
from django import forms
|
||||
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
|
||||
from formtools.wizard.views import NamedUrlSessionWizardView # type: ignore
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class OrganizationForm(forms.Form):
|
||||
organization_type = forms.ChoiceField(
|
||||
required=True,
|
||||
choices=[
|
||||
("Federal", "Federal: a federal agency"),
|
||||
("Interstate", "Interstate: an organization of two or more states"),
|
||||
(
|
||||
"State_or_Territory",
|
||||
(
|
||||
"State or Territory: One of the 50 U.S. states, the District of "
|
||||
"Columbia, American Samoa, Guam, Northern Mariana Islands, "
|
||||
"Puerto Rico, or the U.S. Virgin Islands"
|
||||
),
|
||||
),
|
||||
(
|
||||
"Tribal",
|
||||
(
|
||||
"Tribal: a tribal government recognized by the federal or "
|
||||
"state government"
|
||||
),
|
||||
),
|
||||
("County", "County: a county, parish, or borough"),
|
||||
("City", "City: a city, town, township, village, etc."),
|
||||
(
|
||||
"Special_District",
|
||||
"Special District: an independent organization within a single state",
|
||||
),
|
||||
],
|
||||
widget=forms.RadioSelect,
|
||||
)
|
||||
|
||||
|
||||
class ContactForm(forms.Form):
|
||||
organization_name = forms.CharField(label="Organization Name")
|
||||
street_address = forms.CharField(label="Street address")
|
||||
|
||||
|
||||
# List of forms in our wizard. Each entry is a tuple of a name and a form
|
||||
# subclass
|
||||
FORMS = [
|
||||
("organization", OrganizationForm),
|
||||
("contact", ContactForm),
|
||||
]
|
||||
|
||||
# Dict to match up the right template with the right step. Keys here must
|
||||
# match the first elements of the tuples in FORMS
|
||||
TEMPLATES = {
|
||||
"organization": "application_organization.html",
|
||||
"contact": "application_contact.html",
|
||||
}
|
||||
|
||||
# We need to pass our page titles as context to the templates, indexed
|
||||
# by the step names
|
||||
TITLES = {
|
||||
"organization": "About your organization",
|
||||
"contact": "Your organization's contact information",
|
||||
}
|
||||
|
||||
|
||||
class ApplicationWizard(LoginRequiredMixin, NamedUrlSessionWizardView):
|
||||
|
||||
"""Multi-page form ("wizard") for new domain applications.
|
||||
|
||||
This sets up a sequence of forms that gather information for new
|
||||
domain applications. Each form in the sequence has its own URL and
|
||||
the progress through the form is stored in the Django session (thus
|
||||
"NamedUrlSessionWizardView").
|
||||
"""
|
||||
|
||||
form_list = FORMS
|
||||
|
||||
def get_template_names(self):
|
||||
"""Template for the current step.
|
||||
|
||||
The return is a singleton list.
|
||||
"""
|
||||
return [TEMPLATES[self.steps.current]]
|
||||
|
||||
def get_context_data(self, form, **kwargs):
|
||||
"""Add title information to the context for all steps."""
|
||||
context = super().get_context_data(form=form, **kwargs)
|
||||
context["form_titles"] = TITLES
|
||||
return context
|
||||
|
||||
def done(self, form_list, **kwargs):
|
||||
logger.info("Application form submitted.")
|
|
@ -1,6 +1,6 @@
|
|||
from django import forms
|
||||
|
||||
from .models import UserProfile
|
||||
from ..models import UserProfile
|
||||
|
||||
|
||||
class EditProfileForm(forms.ModelForm):
|
35
src/registrar/templates/application_contact.html
Normal file
35
src/registrar/templates/application_contact.html
Normal file
|
@ -0,0 +1,35 @@
|
|||
<!-- Test page -->
|
||||
{% extends 'application_form.html' %}
|
||||
{% load widget_tweaks %}
|
||||
|
||||
{% block title %}Apply for a .gov domain - Your organization's contact information{% endblock %}
|
||||
|
||||
{% block form_content %}
|
||||
<h1>Your organization's contact information</h1>
|
||||
|
||||
<h2>What is the name and mailing address of your organization?</h2>
|
||||
|
||||
<p id="instructions">Enter the name of the organization your represent. Your organization might be part
|
||||
of a larger entity. If so, enter information about your part of the larger entity.</p>
|
||||
|
||||
<p>All fields are required unless they are marked optional.</p>
|
||||
|
||||
<form class="usa-form usa-form--large" method="post">
|
||||
{{ wizard.management_form }}
|
||||
{% csrf_token %}
|
||||
|
||||
{{ wizard.form.organization_name|add_label_class:"usa-label" }}
|
||||
{{ wizard.form.organization_name|add_class:"usa-input"|attr:"aria-describedby:instructions" }}
|
||||
|
||||
<fieldset class="usa-fieldset">
|
||||
{{ wizard.form.street_address|add_label_class:"usa-label" }}
|
||||
{{ wizard.form.street_address|add_class:"usa-input" }}
|
||||
</fieldset>
|
||||
|
||||
{% if wizard.steps.prev %}
|
||||
<button name="wizard_goto_step" type="submit" class="usa-button usa-button--base" value="{{ wizard.steps.prev }}">Previous</button>
|
||||
{% endif %}
|
||||
<button type="submit" class="usa-button">Submit</button>
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
13
src/registrar/templates/application_form.html
Normal file
13
src/registrar/templates/application_form.html
Normal file
|
@ -0,0 +1,13 @@
|
|||
{% extends 'base.html' %}
|
||||
|
||||
{% block content %}
|
||||
<div class="grid-row">
|
||||
<div class="grid-col-3">
|
||||
{% include 'application_sidebar.html' %}
|
||||
</div>
|
||||
|
||||
<div class="grid-col-9">
|
||||
{% block form_content %}{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
25
src/registrar/templates/application_organization.html
Normal file
25
src/registrar/templates/application_organization.html
Normal file
|
@ -0,0 +1,25 @@
|
|||
<!-- Test page -->
|
||||
{% extends 'application_form.html' %}
|
||||
{% load widget_tweaks %}
|
||||
|
||||
{% block title %}Apply for a .gov domain - About your organization{% endblock %}
|
||||
|
||||
{% block form_content %}
|
||||
<h1>About your organization</h1>
|
||||
|
||||
<form class="usa-form usa-form--large" method="post">
|
||||
{{ wizard.management_form }}
|
||||
{% csrf_token %}
|
||||
|
||||
<fieldset class="usa-fieldset">
|
||||
<legend>
|
||||
<h2> What kind of government organization do you represent?</h2>
|
||||
</legend>
|
||||
|
||||
{{ wizard.form.organization_type|add_class:"usa-radio" }}
|
||||
|
||||
</fieldset>
|
||||
<button type="submit" class="usa-button">Next</button>
|
||||
|
||||
</form>
|
||||
{% endblock %}
|
18
src/registrar/templates/application_sidebar.html
Normal file
18
src/registrar/templates/application_sidebar.html
Normal file
|
@ -0,0 +1,18 @@
|
|||
<div class="tablet:grid-col-4 margin-bottom-4 tablet:margin-bottom-0">
|
||||
<nav aria-label="Form steps,">
|
||||
<ul class="usa-sidenav">
|
||||
{% for this_step in wizard.steps.all %}
|
||||
<li class="usa-sidenav__item">
|
||||
{% if forloop.counter <= wizard.steps.step1 %}
|
||||
<a href="{% url wizard.url_name step=this_step %}"
|
||||
{% if this_step == wizard.steps.current %}class="usa-current"{% endif%}>
|
||||
{{ form_titles|get_item:this_step }}
|
||||
</a>
|
||||
{% else %}
|
||||
{{ form_titles|get_item:this_step }}
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
|
@ -47,7 +47,7 @@
|
|||
<script src="{% static 'js/uswds.min.js' %}" defer></script>
|
||||
<a class="usa-skipnav" href="#main-content">Skip to main content</a>
|
||||
|
||||
<section class="usa-banner" aria-label="Official government website">
|
||||
<section class="usa-banner" aria-label="Official website of the United States government">
|
||||
<div class="usa-accordion">
|
||||
<header class="usa-banner__header">
|
||||
<div class="usa-banner__inner">
|
||||
|
@ -58,17 +58,15 @@
|
|||
<p class="usa-banner__header-text">
|
||||
An official website of the United States government
|
||||
</p>
|
||||
<p class="usa-banner__header-action" aria-hidden="true">
|
||||
Here’s how you know
|
||||
</p>
|
||||
<p class="usa-banner__header-action">Here’s how you know</p>
|
||||
</div>
|
||||
<button class="usa-accordion__button usa-banner__button" aria-expanded="false"
|
||||
aria-controls="gov-banner-default-default">
|
||||
aria-controls="gov-banner-default">
|
||||
<span class="usa-banner__button-text">Here’s how you know</span>
|
||||
</button>
|
||||
</div>
|
||||
</header>
|
||||
<div class="usa-banner__content usa-accordion__content" id="gov-banner-default-default">
|
||||
<div class="usa-banner__content usa-accordion__content" id="gov-banner-default">
|
||||
<div class="grid-row grid-gap-lg">
|
||||
<div class="usa-banner__guidance tablet:grid-col-6">
|
||||
<img class="usa-banner__icon usa-media-block__img" src="{% static 'img/icon-dot-gov.svg' %}" role="img"
|
||||
|
@ -90,9 +88,9 @@
|
|||
<strong>lock</strong> (
|
||||
<span class="icon-lock"><svg xmlns="http://www.w3.org/2000/svg" width="52" height="64"
|
||||
viewBox="0 0 52 64" class="usa-banner__lock-image" role="img"
|
||||
aria-labelledby="banner-lock-title-default banner-lock-description-default" focusable="false">
|
||||
<title id="banner-lock-title-default">Lock</title>
|
||||
<desc id="banner-lock-description-default">A locked padlock</desc>
|
||||
aria-labelledby="banner-lock-description" focusable="false">
|
||||
<title id="banner-lock-title">Lock</title>
|
||||
<desc id="banner-lock-description">Locked padlock icon</desc>
|
||||
<path fill="#000000" fill-rule="evenodd"
|
||||
d="M26 0c10.493 0 19 8.507 19 19v9h3a4 4 0 0 1 4 4v28a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4V32a4 4 0 0 1 4-4h3v-9C7 8.507 15.507 0 26 0zm0 8c-5.979 0-10.843 4.77-10.996 10.712L15 19v9h22v-9c0-6.075-4.925-11-11-11z" />
|
||||
</svg> </span>) or <strong>https://</strong> means you’ve safely connected to
|
||||
|
@ -107,8 +105,9 @@
|
|||
</section>
|
||||
|
||||
|
||||
{% block usa_overlay %}<div class="usa-overlay"></div>{% endblock %}
|
||||
{% block banner %}
|
||||
<header class="usa-header usa-header-basic" role="navigation">
|
||||
<header class="usa-header usa-header-basic">
|
||||
<div class="usa-nav-container">
|
||||
<div class="usa-navbar">
|
||||
{% block logo %}
|
||||
|
@ -120,10 +119,10 @@
|
|||
</em>
|
||||
</div>
|
||||
{% endblock %}
|
||||
<button class="usa-menu-btn">Menu</button>
|
||||
<button type="button" class="usa-menu-btn">Menu</button>
|
||||
</div>
|
||||
{% block usa_nav %}
|
||||
<nav>
|
||||
<nav class="usa-nav" aria-label="Primary navigation,">
|
||||
<button type="button" class="usa-nav__close">
|
||||
<img src="/public/img/usa-icons/close.svg" role="img" alt="Close" />
|
||||
</button>
|
||||
|
@ -142,7 +141,6 @@
|
|||
</div>
|
||||
</header>
|
||||
{% endblock banner %}
|
||||
{% block usa_overlay %}<div class="usa-overlay"></div>{% endblock %}
|
||||
<div id="wrapper">
|
||||
{% block messages %}
|
||||
{% if messages %}
|
||||
|
@ -158,7 +156,7 @@
|
|||
|
||||
{% block section_nav %}{% endblock %}
|
||||
|
||||
<main id="main-content">
|
||||
<main id="main-content" class="grid-container">
|
||||
{% block hero %}{% endblock %}
|
||||
{% block content %}{% endblock %}
|
||||
</main>
|
||||
|
|
8
src/registrar/templatetags/__init__.py
Normal file
8
src/registrar/templatetags/__init__.py
Normal file
|
@ -0,0 +1,8 @@
|
|||
"""Custom template tags to make our lives easier."""
|
||||
|
||||
from django.template.defaulttags import register
|
||||
|
||||
|
||||
@register.filter
|
||||
def get_item(dictionary, key):
|
||||
return dictionary.get(key)
|
|
@ -14,7 +14,7 @@ class MockUserLogin:
|
|||
args = {
|
||||
UserModel.USERNAME_FIELD: username,
|
||||
}
|
||||
user = UserModel.objects.get_or_create(**args)
|
||||
user, _ = UserModel.objects.get_or_create(**args)
|
||||
user.is_staff = True
|
||||
user.is_superuser = True
|
||||
user.save()
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
from django.test import Client, TestCase
|
||||
from django.urls import reverse
|
||||
from django.contrib.auth import get_user_model
|
||||
|
||||
from django_webtest import WebTest # type: ignore
|
||||
|
||||
|
||||
class TestViews(TestCase):
|
||||
def setUp(self):
|
||||
|
@ -22,8 +25,14 @@ class TestViews(TestCase):
|
|||
self.assertEqual(response.status_code, 302)
|
||||
self.assertIn("?next=/whoami/", response.headers["Location"])
|
||||
|
||||
def test_application_form_not_logged_in(self):
|
||||
"""Application form not accessible without a logged-in user."""
|
||||
response = self.client.get("/register/")
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertIn("/login?next=/register/", response.headers["Location"])
|
||||
|
||||
class LoggedInTests(TestCase):
|
||||
|
||||
class TestWithUser(TestCase):
|
||||
def setUp(self):
|
||||
username = "test_user"
|
||||
first_name = "First"
|
||||
|
@ -32,6 +41,14 @@ class LoggedInTests(TestCase):
|
|||
self.user = get_user_model().objects.create(
|
||||
username=username, first_name=first_name, last_name=last_name, email=email
|
||||
)
|
||||
|
||||
def tearDown(self):
|
||||
self.user.delete()
|
||||
|
||||
|
||||
class LoggedInTests(TestWithUser):
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.client.force_login(self.user)
|
||||
|
||||
def test_whoami_page(self):
|
||||
|
@ -44,3 +61,36 @@ class LoggedInTests(TestCase):
|
|||
def test_edit_profile(self):
|
||||
response = self.client.get("/edit_profile/")
|
||||
self.assertContains(response, "Display Name")
|
||||
|
||||
def test_application_form_view(self):
|
||||
response = self.client.get("/register/", follow=True)
|
||||
self.assertContains(response, "About your organization")
|
||||
|
||||
|
||||
class FormTests(TestWithUser, WebTest):
|
||||
|
||||
"""Webtests for forms to test filling and submitting."""
|
||||
|
||||
# Doesn't work with CSRF checking
|
||||
# hypothesis is that CSRF_USE_SESSIONS is incompatible with WebTest
|
||||
csrf_checks = False
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.app.set_user(self.user.username)
|
||||
|
||||
def test_application_form_empty_submit(self):
|
||||
# 302 redirect to the first form
|
||||
page = self.app.get(reverse("application")).follow()
|
||||
# submitting should get back the same page if the required field is empty
|
||||
result = page.form.submit()
|
||||
self.assertIn("About your organization", result)
|
||||
|
||||
def test_application_form_organization(self):
|
||||
# 302 redirect to the first form
|
||||
page = self.app.get(reverse("application")).follow()
|
||||
form = page.form
|
||||
form["organization-organization_type"] = "Federal"
|
||||
result = page.form.submit().follow()
|
||||
# Got the next form page
|
||||
self.assertIn("contact information", result)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue